【发布时间】:2017-11-26 03:49:09
【问题描述】:
我有一个数据框:
df<- data.frame(region= c("1", "1", "1","1","1","1","1","1","2","2"),
plot=c("1", "1", "1","2","2","2", "3","3","3","3"),
interact=c("A_B", "C_D","C_D", "E_F","C_D","C_D", "D_E",
"D_E","C_B","A_B"))
我想计算每个绘图子集的 interact 的所有唯一级别。最终的数据框如下所示:
result<-
Plot freq
1 2
2 2
3 3
我想使用 dplyr 并且已经做到了这一点:
df2 <-df %>% group_by(plot) %>%mutate(freq=length(unique((interact))))
但使用上面的代码,我还没有想出一种方法,每个图只表示一个值(即,删除每个唯一图的 freq 中的重复值)。
【问题讨论】:
-
您需要
summarize而不是mutate:df %>% group_by(plot) %>%summarise(freq = n_distinct(interact))。 -
在基础 R 中,您可以为 data.frame 执行
aggregate(interact ~ plot, data = df, function(x) length(unique(x)))或为命名向量执行rowSums(table(df$plot, df$interact) > 0)。
标签: r