使用R在一个单元格中的多个值

时间:2012-12-10 05:20:42

标签: r

假设有2个data.frames,例如:

dat1 <- read.table("[path_dat1]", header=TRUE, sep=",")
    id   name  age
     1   Jack   21
     2  James   40

dat2 <- read.table("[path_dat2]", header=TRUE, sep=",")
    id      interests
     1       football
     1     basketball
     1         soccer
     2  pingpang ball

如何将表1和表2连接到data.frame,如下所示?

  id   name age                       interests
1  1   Jack  21  (football, basketball, soccer)
2  2  James  40                 (pingpang ball)

如何以最简单的方式使用plyr加入这些?

2 个答案:

答案 0 :(得分:2)

我无法告诉你如何在plyr中解决这个问题,但可以在基地:

dat3 <- aggregate(interests~id, dat2, paste, collapse=",")
merge(dat1, dat3, "id")

编辑:如果你真的想要括号,你可以使用:

ppaste <- function(x) paste0("(", gsub("^\\s+|\\s+$", "", paste(x, collapse = ",")), ")")
dat3 <- aggregate(interests~id, dat2, ppaste)
merge(dat1, dat3, "id")

答案 1 :(得分:0)

使用Tyler的例子:

dat1$interests <- ave(dat1$id, dat1$id, 
        FUN=function(x) paste(dat2[ dat2$id %in% x, "interests"], collapse=",") )
> dat1
  id   name age                     interests
1  1   Jack  21  football, basketball, soccer
2  2  James  40                 pingpang ball