【发布时间】:2016-04-18 20:54:23
【问题描述】:
工作数据如下:
df <- data.table(Name = c("a","a","b","b","b","c","c"),
SPP = c("YP","YP","YP","BY","BY","CY","YP"),
Con = sample(1:20,7))
df
Name SPP Con
1: a YP 18
2: a YP 4
3: b YP 2
4: b BY 15
5: b BY 17
6: c CY 1
7: c YP 20
目标是汇总SPP 中的信息,并按Name 分组。理想的输出应该是这样的:
Name SPP N V1
1: a YP 2 1
2: b YP 1 2
3: b BY 2 2
4: c CY 1 2
5: c YP 1 2
其中N 是每个Name 组中每个SPP 的观察数。 V1 是每个Name 组中SPP 类型的总数。例如,在上面的汇总表中,第 2 行和第 3 行显示:b(Name) 有 1 个 YP 和 2 个 BY ( SPP)。 b 中的SPP 类型总数为 2(V1)。
我可以通过以下方式生成汇总表:
m1 <- df[, .(.N), by = .(Name, SPP)]
m2 <- df[,.(length(unique(SPP))), by = Name]
merge(m1,m2,by = c("Name"))
问题是我是否可以在不使用merge 两个表的情况下使用更简洁的data.table 命令生成此汇总表?我试过类似的东西:
m1 <- df[, .(.N, length(unique(SPP))), by = .(Name, SPP)]
它并没有像想要的那样工作。我不知道为什么。有人可以帮我解释一下吗?谢谢!
【问题讨论】:
标签: r data.table summary