R data.table:为所有行添加新行的子列

时间:2014-05-07 09:27:42

标签: r data.table

任务:对于所有condition==FALSE,请将groupmean设置为numbers的所有group。 对于condition==TRUEnumbers只有condition==TRUE group的所有set.seed(42) require(data.table) DT <- data.table(condition=sample(c(TRUE,FALSE), 50, replace=T), group=rep(LETTERS[1:4], times=25), numbers=1:100) # modifies the right rows, but wrong value DT[condition==FALSE, groupmean_1 := mean(numbers), by=group] # right values, but not only rows where condition=FALSE DT[, groupmean_2 := mean(numbers), by=group] head(DT) condition group numbers groupmean_1 groupmean_2 1: FALSE A 1 42.66667 49 2: FALSE B 2 55.68421 50 3: TRUE C 3 NA 51 4: FALSE D 4 47.78947 52 5: FALSE A 5 42.66667 49 6: FALSE B 6 55.68421 50 集合意味着{{1}}。 我想有一个解决方案,不需要复制整个data.table但添加所需的列。我敢打赌这是一个简单的解决方案,但我迷失了一点......

到目前为止我的尝试:

{{1}}

1 个答案:

答案 0 :(得分:2)

您应该颠倒定义groupmean的顺序。将其计算为所有行的组平均值,然后替换condition == TRUE之后的行。

DT[, groupmean:=mean(numbers), by=group]
DT[condition==TRUE, groupmean:=mean(numbers), by='group,condition']

我希望有帮助