我有一个如下所示的数据框:
id <- c(1,2,3,4,5,6,7,8,9,10)
val <- c("a", "b", "c", "a", "b", "a", "c", "a", "a", "c")
df <- data.frame(id,val)
我正在尝试创建一个长度为10的向量,对于每个id,它给出df中具有相同值val的行数。输出应为
out <- c(5, 2, 3, 5, 2, 5, 3, 5, 5, 3)
它基本上与
相反with(df, tapply(val, id, function(x) length(unique(x))))
如果这有道理?也许我可以用df以某种方式合并(df,tapply(id,val,function(x)length(unique(x)))),但这似乎是一个非常难看的解决方案。
答案 0 :(得分:2)
你可以这样做:
table(df$val)[df$val]
答案 1 :(得分:0)
ave
函数适用于此
cc<-with(df, ave(id,val, FUN=length))
cbind(df, cc)
将导致
id val cc
1 1 a 5
2 2 b 2
3 3 c 3
4 4 a 5
5 5 b 2
6 6 a 5
7 7 c 3
8 8 a 5
9 9 a 5
10 10 c 3