【发布时间】:2014-07-09 19:51:51
【问题描述】:
我正在寻找一种干净的方法来从表中取出一行并将其扩展为多行,其中除了其中一列之外具有几乎相同的信息。
下面是一个我从这里开始的例子:
sex cat status pairs
1 F 6,10 Cancer 6,10
2 F 8,10 Cancer 8,10
3 F 12,13 NoCancer 12,13
4 F 3,4,5,10 Cancer
5 F 7,10 Cancer 7,10
6 F 4,8 NoCancer 4,8
并希望以这样的方式结束:
sex cat status pairs
1 F 6,10 Cancer 6,10
2 F 8,10 Cancer 8,10
3 F 12,13 NoCancer 12,13
4 F 3,4,5,10 Cancer 3,4
4 F 3,4,5,10 Cancer 3,5
4 F 3,4,5,10 Cancer 3,10
4 F 3,4,5,10 Cancer 4,5
4 F 3,4,5,10 Cancer 4,10
4 F 3,4,5,10 Cancer 5,10
5 F 7,10 Cancer 7,10
6 F 4,8 NoCancer 4,8
现在,我知道我可以将一个字符串轻松拆分,然后找到所有可能的大小为 m 的组合。
类似这样的:
combn(x,2, simplify=F, function(x){ paste(x, collapse=",")} )
虽然我做了类似的事情,我将一个字符串分解为单个元素,然后使用plyr(正如才华横溢的@recology_ 通过this gist 建议的那样)
在我之前的示例中(如要点所示),解决方案最终类似于以下内容:
df <- data.frame(id =c(11,32,37),
name=c("rick","tom","joe"),
stringsAsFactors = FALSE)
library(plyr)
foo <- function(x){
strsplit(x, "")[[1]]
}
ddply(df, .(id, name), summarise, letters=foo(name))
我未能成功地将 combn() 函数合并到此模式中。任何建议将不胜感激。
【问题讨论】:
-
您可以使用
dput在此处包含您的一些数据吗?
标签: r string dataframe combinations plyr