我正在处理一个现有的大型数据框,其中包含一个我需要“转置”为多行的列,同时保留每行中的原始用户ID。
请注意,favs列的内容字面上是包含“c(...)”的字符串。这里显示了一个简化版本:
**uId** **favs**
1000 c('pizza')
1001 c('seafood','steaks')
1002 NA
1003 c('sushi','strawberries')
我想要的输出:
**uId** **favs**
1000 pizza
1001 seafood
1001 steaks
1002 NA
1003 sushi
1003 strawberries
最有效的方法是什么?我考虑融化/ dcast但不知道如何在这里应用它,因为FAVS列需要不公开,然后将包含不同数量的元素。
答案 0 :(得分:0)
我们可以使用unnest
library(tidyr)
unnest(df1)
# uID favs
#1 1000 pizza
#2 1001 seafood
#3 1001 steaks
#4 1002 <NA>
#5 1003 sushi
#6 1003 strawberries
或者使用base R
,使用{faves'列的lengths
和unlist
'favs'复制其他列行
data.frame(uID = rep(df1$uID, lengths(df1$favs)), favs = unlist(df1$favs))
这可能很快,因为rep
和unlist
都很快
df1 <- data.frame(uID = 1000:1003,
favs = I(list('pizza', c('seafood', 'steaks'), NA,
c('sushi', 'strawberries'))))