R使用函数聚合数据框

时间:2016-02-09 17:09:47

标签: r aggregate

对于这个数据框,我想总结“inf”列中的信息,为每个id级别提取“1”的百分比:

d <- "
    id        var iso exp rep pl inf nles 
    BM_1_1_1   B   M   1   1  1   1   19   
    BM_1_1_2   B   M   1   1  2   1   50
    BM_1_1_3   B   M   1   1  3   1   18
    BM_1_2_1   B   M   1   2  1   0    1
    BM_1_2_2   B   M   1   2  2   1   30
    BM_1_2_3   B   M   1   2  3   1   38
    BM_1_3_1   B   M   1   2  1   1    1
    BM_1_3_2   B   M   1   2  2   0    0
    BM_1_3_3   B   M   1   2  3   0    0 
"

d <- read.table(text=d, header = TRUE, check.names = F)

我想通过“新列”获取这个新的聚合数据框

id        var iso exp rep pl inf nles newcolumn
BM_1_1_1   B   M   1   1  1   1   19     100
BM_1_2_1   B   M   1   2  1   0    1      66
BM_1_3_1   B   M   1   2  1   0    1      33

有人可以帮我吗? 提前谢谢!

1 个答案:

答案 0 :(得分:2)

您的问题,正如其目前所述,并未反映所需的输出。话虽如此,如果您创建new_id列,则可以通过new_column计算aggregate()并将其传递给函数。如果您的inf列是二进制(即严格为1和0),则此方法有效:

d$new_id <- substr(d$id, 1, 6)
d$new_column <- aggregate(data = d, inf ~ new_id, function(x) mean(x) * 100)