以Oats数据为例,我想获得以下结果:
library(nlme)
dframe <- data.frame( Block = rep("I", 3), Variety = names(table(Oats[Oats$Block == "I", ]$Variety)), Freq = as.vector(table(Oats[Oats$Block == "I", ]$Variety)))
Block Variety Freq
1 I Golden Rain 4
2 I Marvellous 4
3 I Victory 4
...
我想在燕麦数据中的所有其他块II到VI的上述结果。我希望在R中有一种更有效的方法,而不必为每个Block ID编写单独的代码。我已经阅读了一些帖子,但仍然没有找到解决方案。我也尝试过使用一些函数 - 聚合,表格等。
由于
答案 0 :(得分:4)
您可以使用table
> ( a <- as.data.frame(with(Oats, table(Block, Variety))) )
> a[order(a$Block, decreasing = TRUE), ]
或plyr::count
> library(plyr)
> count(Oats, vars = c("Block", "Variety"))
我第一次data.table
回答......
我认为您可以执行以下操作,之后不需要重新订购。
> library(data.table)
> setDT(Oats)[, .N, by = list(Block, Variety)]
data.table
用户,如果错误,请纠正我。