关于r:将数据框字符串列拆分为多列 |
您所在的位置:网站首页 › r语言如何将一列数据分成多列 › 关于r:将数据框字符串列拆分为多列 |
我想获取表格的数据 123456before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2')) attr type 1 1 foo_and_bar 2 30 foo_and_bar_2 3 4 foo_and_bar 4 6 foo_and_bar_2并在上方的" type"列上使用split()来获得如下信息: 12345 attr type_1 type_2 1 1 foo bar 2 30 foo bar_2 3 4 foo bar 4 6 foo bar_2我想出了一些令人难以置信的复杂性,涉及某种形式的apply起作用了,但此后我放错了地方。 似乎太复杂了,无法成为最佳方法。 我可以按以下方式使用strsplit,但不清楚如何将其重新放入数据框中的2列。 123456789101112> strsplit(as.character(before$type),'_and_') [[1]] [1]"foo""bar" [[2]] [1]"foo" "bar_2" [[3]] [1]"foo""bar" [[4]] [1]"foo" "bar_2"感谢您的指导。 我还不太讨厌R列表。 使用stringr::str_split_fixed 12library(stringr) str_split_fixed(before$type,"_and_", 2) 相关讨论 这对于今天的问题也很好用..但是它在每行的开头添加了一个c。知道为什么吗??? left_right ,2) 我想使用具有" ..."的模式进行拆分,当我应用该函数时,它不返回任何内容。可能是什么问题呢。我的类型是"测试...得分" @ user3841581-我知道您的旧查询,但这在文档中已涉及-str_split_fixed("aaa...bbb", fixed("..."), 2)与fixed()配合使用可以很好地在pattern=参数中"匹配固定的字符串"。 .表示正则表达式中的任何字符。 谢谢hadley,一种非常方便的方法,但是有一点可以改进,如果原始列中有NA,则在分离后它将变成结果列中的sevalal空字符串,这是不必要的,我想让NA仍然保持NA后分割 效果很好,即如果缺少分隔符!即,如果我有一个要在列1,1," N"," N"中分开的向量a另一个选择是使用新的tidyr软件包。 12345678910111213141516library(dplyr) library(tidyr) before % separate(type, c("foo","bar"),"_and_") ## attr foo bar ## 1 1 foo bar ## 2 30 foo bar_2 ## 3 4 foo bar ## 4 6 foo bar_2 相关讨论 有没有办法限制使用split分割的数量?可以说我只想在_上拆分一次(或使用str_split_fixed并向现有数据框中添加列)? 是。查看文件5年后添加强制性data.table解决方案 12345678library(data.table) ## v 1.9.6+ setDT(before)[, paste0("type", 1:2) := tstrsplit(type,"_and_")] before # attr type type1 type2 # 1: 1 foo_and_bar foo bar # 2: 30 foo_and_bar_2 foo bar_2 # 3: 4 foo_and_bar foo bar # 4: 6 foo_and_bar_2 foo bar_2我们还可以通过添加type.convert和fixed参数来确保生成的列具有正确的类型并提高性能(因为"_and_"并不是正则表达式) 1setDT(before)[, paste0("type", 1:2) := tstrsplit(type,"_and_", type.convert = TRUE, fixed = TRUE)] 相关讨论 如果_and_模式的数量不同,则可以找出与max(lengths(strsplit(before$type, _and_)))匹配的最大数量(即将来的列)还有另一种方法:在out上使用rbind: 123456789before |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |