我有一个类似以下的数据集,其中b列是一个因素:
df<-data.frame(a=c(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4), b=c('aa', 'aa', 'bb', 'aa', 'bb', 'cc', 'aa', 'aa', 'aa', 'aa', 'aa', 'cc'))
我想要一个列c,该列计算“ 1”,“ 2”,“ 3”或“ 4”具有“ aa”的次数,所以类似:
答案 0 :(得分:1)
library(dplyr)
df %>%
group_by(a) %>%
mutate(c = sum(b == "aa")) %>%
ungroup()
以R为底
transform(df, c = ave(+(b == "aa"), a, FUN = sum))
答案 1 :(得分:0)
这是一个data.table
解决方案,适用于a
和b
中所有级别的组合。实际上,您的想法是将a
和b
列分组(因此为什么它们位于方括号的第三个参数中),然后分配该组合中的行数({{1 }})到您的新列(.N
)。
c
由reprex package(v0.3.0)于2019-10-02创建
答案 2 :(得分:0)
带有base R
的另一个rowsum
选项
df$c <- with(df, rowsum(+(b == "aa"), a)[,1][as.character(a)])