2017-08-01 186 views
0
df <- data.frame(name=c('black','black','black','red','red'), 
       type=c('chair','chair','sofa','sofa','sofa'), 
       num=c(4,5,12,4,6)) 

对于每一行,我要计算“type”出现的次数> 4的次数,然后创建一个新列。因此,对于第一行,“椅子”出现一次,其值为5,因此它被赋值为1.对于第二行,同样的事情。对于第三排,沙发出现两次,值> 4。因此,所有独特的 “类型” 最终将具有相同值:计数出现次数[R]

df 
# name type num count 
# 1 black chair 4  1 
# 2 black chair 5  1 
# 3 black sofa 12  2 
# 4 red sofa 4  2 
# 5 red sofa 6  2 
+2

你是说'df%>%group_by(type)%>%mutate(count = sum(num> 4))'或者用' (df,ave(num> 4,type,FUN = sum))' – akrun

+0

是的,谢谢! – NBC

回答

1
df$count = ave(df$num, df$type, FUN = function(x) sum(x>4)) 
df$count 
#[1] 1 1 2 2 2 
1

我们可以使用

library(dplyr) 
df %>% 
    group_by(type) %>% 
    mutate(count = sum(num>4)) 

或用base R(正如我们在前面的评论)

df$count <- with(df, ave(num > 4, type, FUN = sum))