我想要获取表格的数据
before = 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
Run Code Online (Sandbox Code Playgroud)
并使用split()上面的列" type"来得到这样的东西:
attr type_1 type_2
1 1 foo bar
2 30 foo bar_2
3 4 foo bar
4 6 foo bar_2
Run Code Online (Sandbox Code Playgroud)
我提出了一些令人难以置信的复杂问题,涉及某种形式的apply工作,但我已经错了.这似乎太复杂了,不是最好的方式.我可以使用strsplit如下,但不清楚如何将其恢复到数据框中的2列.
> strsplit(as.character(before$type),'_and_')
[[1]]
[1] "foo" "bar"
[[2]]
[1] "foo" "bar_2"
[[3]]
[1] "foo" "bar"
[[4]]
[1] "foo" "bar_2"
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何指示.我还没有完全理解R列表.
我知道我之前遇到过这个问题,但此刻我有一点精神障碍.因为我在SO上找不到它,我会在这里发布,所以我可以在下次找到它.
我有一个数据框,其中包含一个表示ID标签的字段.此标签有两个部分,alpha前缀和数字后缀.我想将它拆开并创建两个具有这些值的新字段.
structure(list(lab = c("N00", "N01", "N02", "B00", "B01", "B02",
"Z21", "BA01", "NA03")), .Names = "lab", row.names = c(NA, -9L
), class = "data.frame")
df$pre<-strsplit(df$lab, "[0-9]+")
df$suf<-strsplit(df$lab, "[A-Z]+")
Run Code Online (Sandbox Code Playgroud)
这使
Run Code Online (Sandbox Code Playgroud)lab pre suf 1 N00 N , 00 2 N01 N , 01 3 N02 N , 02 4 B00 B , 00 5 B01 B , 01 6 B02 B , 02 7 Z21 Z , 21 8 BA01 BA , 01 9 NA03 NA , 03
所以,第一个strsplit工作正常,但第二个提供了一个列表,每个都有两个元素,一个空字符串和我想要的结果,并将它们填充到dataframe列中.
如何从列表的每个元素中选择第二个子元素?(或者,有没有更好的方法来做到这一点)