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

对于每一行,我想要计算“type”出现的次数与该行的num值,然后创建一个新列。因此,对于第一行,“椅子”和“民”两次出现在数据集中,所以它被分配一个2第二行,同样的事情。对于第三排,沙发的12计数重复次数[R]

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

有一个在你的代码来创建DF一个错字:第二个'num'应该是'4'。 –

+3

相同的分配5年10个​​月后..;) – Henrik

回答

1

使用dplyr::add_count值出现一次:

dplyr::add_count(df, type, num) 

# A tibble: 5 x 4 
# name type num  n 
# <fctr> <fctr> <dbl> <int> 
#1 black chair  4  2 
#2 black chair  4  2 
#3 black sofa 12  1 
#4 red sofa  4  1 
#5 red sofa  6  1 
3

在基础R使用ave,你有

df$count <- with(df, ave(num, name, type, num, FUN=length)) 

获取的长度num,按名称,类型和数量进行分组。使用with减少打字了一下。

这将返回

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