我从 Excel 电子表格中读取了一些数据,其中策展人不了解关系数据库并处理一对多关系,因此将多个变量放在一列中:
>df <- data.frame(id=c("X1", "X23", "X5"), vars=c("foo, bar, hello", "world", NA), var2=c(1,2,3))
>df
id vars var2
1 X1 foo, bar, hello 1
2 X23 world 2
3 X5 <NA> 3
我想将vars
列转换为一个新的数据框,这样我就可以有一个一对多的关系:
>df
id var2
X1 X1 1
X23 X23 2
X5 X5 3
>df2
id var
1 X1 foo
2 X1 bar
3 X1 hello
4 X23 world
我能够将该vars
列解析为一个列表,其中每个条目都是一个变量向量:
>library(stringr)
>halfway <- str_split(df$vars, pattern=", ")
>halfway
[[1]]
[1] "foo" "bar" "hello"
[[2]]
[1] "world"
[[3]]
[1] NA
但我不确定如何获取此列表并将其转换为 long data.frame
。
我玩过,但我不能把它变成长格式而不丢失关于每个变量所属的 ID 的信息(使用unlist
)。我也看过,reshape
但它似乎没有做我想要的。
我可以使用 for 循环迭代地构建新表,但这非常低效。有没有一个优雅的解决方案?