【问题标题】:Transpose one column of a data frame into multiple rows while retaining ID [duplicate]将数据框的一列转置为多行,同时保留 ID [重复]
【发布时间】:2018-05-01 11:36:52
【问题描述】:

我正在处理一个大型现有数据框,该数据框有一列需要“转置”为多行,同时在每一行中保留原始用户 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

最有效的方法是什么?我考虑过 melt/dcast 但不确定如何在此处应用它,因为 FAVS 列需要不列出,然后将包含不同数量的元素。

【问题讨论】:

  • 不,这不是同一个问题。谢谢 akrun,您的回复很有帮助。

标签: r dataframe transpose


【解决方案1】:

我们可以使用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,使用“favs”列的lengths和“favs”列的unlist复制其他列行

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'))))

【讨论】:

  • 非常感谢akrun,您的回复回答了我的问题
猜你喜欢
  • 2023-02-25
  • 2021-08-16
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
相关资源
最近更新 更多