将数据帧的一列转换为多行,同时保留ID

时间:2018-05-01 11:36:53

标签: r dataframe transpose

我正在处理一个现有的大型数据框,其中包含一个我需要“转置”为多行的列,同时保留每行中的原始用户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列需要不公开,然后将包含不同数量的元素。

1 个答案:

答案 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'列的lengthsunlist'favs'复制其他列行

data.frame(uID = rep(df1$uID, lengths(df1$favs)), favs = unlist(df1$favs))

这可能很快,因为repunlist都很快

数据

df1 <- data.frame(uID = 1000:1003,
     favs = I(list('pizza', c('seafood', 'steaks'), NA,
     c('sushi', 'strawberries'))))