0

我有两个数据框,一个带有唯一主题 ID 列表(长度为 39),另一个带有重复的主题 ID 列表,如果受试者参加了多次试验。我想

基本上,我需要从这个开始:

a 23
a 33
a 18
b 90
b 2

对此:

a [23, 33, 18] 
b [90, 2]

我已经可怜地为此工作了几个小时,并且希望能得到任何帮助!

我已经尝试了一百万件事,但似乎都没有工作!

for (i in 1:39) {

   for (j in 1:119) {

      if (datafram1$ids[i] == datafram2$ids[j]) datafram1$cases[i] <- append(datafram1$cases[i],datafram2$scores[j])

   }

}

导致以下警告:要替换的项目数不是替换长度的倍数

4

1 回答 1

2

也许将其存储为列表:

dat <- read.table(text="a 23
a 33
a 18
b 90
b 2", header=FALSE)

with(dat, tapply(V2, V1, c))

## $a
## [1] 23 33 18
## 
## $b
## [1] 90  2

如果您希望它看起来像您的输出:

FUN <- function(x) paste0("[", paste(x, collapse=", "), "]")

aggregate(V2~V1, dat, FUN)
##   V1           V2
## 1  a [23, 33, 18]
## 2  b      [90, 2]
于 2013-05-12T01:58:32.200 回答