【问题标题】:Normalize data frame with list column [duplicate]使用列表列规范化数据框[重复]
【发布时间】:2014-03-02 13:39:28
【问题描述】:

我有一个将一些 id 映射到版本列表的数据框:

id versions
 1  1, 2, 4
 2        1
 3     3, 4

可以使用以下代码创建:

df <- data.frame(id=c(1, 2, 3), 
  versions=c("1 2 4", "1", "3 4"), 
  stringsAsFactors=F)
df$versions <- strsplit(df$versions, " ")

注意versions 列的每个元素都是一个列表。

如何规范化这个数据框?我需要得到这样的数据框:

id version
 1       1
 1       2
 1       4
 2       1
 3       3
 3       4

【问题讨论】:

  • 嗯,问同一个问题的方法很多

标签: r dataframe reshape


【解决方案1】:

stack 非常适合:

stack(setNames(df$versions, df$id))
#   values ind
# 1      1   1
# 2      2   1
# 3      4   1
# 4      1   2
# 5      3   3
# 6      4   3

【讨论】:

  • 不错!我只是根据问题添加colnames(x) &lt;- c("version", "id"); x &lt;- x[, c("id", "version")]来格式化数据框x(假设x是stack()返回的数据框)。
【解决方案2】:

我改编并简化了 another SO question 的解决方案以供将来参考:

data.frame(id = rep(df$id, sapply(df$versions, length)),
      version = unlist(df$versions))

新的id 列是通过根据其拥有的版本数(即列表versions)重复每个id 来计算的。新的version 列是使用unlist 计算的,它只是通过连接列表中的所有元素返回一个向量。

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 2021-04-05
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2020-12-15
    • 2014-12-12
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多