【问题标题】:Using R, how to split a data frame's column and then break into multiple rows? [duplicate]使用 R,如何拆分数据框的列,然后分成多行? [复制]
【发布时间】:2014-08-25 18:24:41
【问题描述】:

我有一个数据框,其中一个字段是一个包含逗号分隔的名称列表的字符串。我想扩展数据框,以便每个原始行都有多行,行数是列表中的名称数。所以,我想改变类似的东西

df <- data.frame(f1=c("a","b"), f2=c("b","e"), f3=c("a,b,c", "a,d"))
df
f1  f2  f3
a   b   a,b,c
d   e   a,d

进入

df
f1  f2  f3
a   b   a
a   b   b
a   b   c
d   e   a
d   e   d

我怀疑 dplyr 和/或 reshape2 是这项工作的工具,但我不确定在这种情况下如何应用它们。

【问题讨论】:

  • 具体查看该答案中的 cSplit 函数。只需将sep="," 用于您的数据。

标签: r plyr dplyr


【解决方案1】:

这是apply 的一种方法:

as.data.frame(do.call(rbind, apply(df, 1, function(x) {
  do.call(expand.grid, strsplit(x, ","))
})))
#   f1 f2 f3
# 1  a  b  a
# 2  a  b  b
# 3  a  b  c
# 4  b  e  a
# 5  b  e  d

【讨论】:

  • 也许您可以将您的答案添加到重复的问题中,这样我们就可以继续向其他人指出相同的问题。
  • @MrFlick 好的,我也添加了另一个问题的答案。
  • 嘿,这是一个非常棒的解决方案,并且比 splitstackshape 包函数快得多,如果上面的 f3 列的长度不同,它也给出了 NA。现在有办法为此创建一个进度条,因为我有一个非常大的工作数据集。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2019-05-20
  • 1970-01-01
  • 2014-08-27
  • 2013-12-21
  • 2017-03-29
  • 2015-08-28
相关资源
最近更新 更多