2017-10-13 51 views
1

创建与DF唯一值的计数的新专栏中,我有一个数据帧DF,看起来像这样我如何通过组中的R

ID Color Street Apt Year 
1 blue  14  8 1986  
1 red  14  9 1986  
2 blue  10  1 1990  
3 pink  70  5 1970  
3 blue  70  6 1970  
3 blue  17  2 1970  

我想创建一个新列,显示号码每个ID的颜色街道和apt的独特价值。

ID Color Street Apt Year Count 
1 blue  14  8 1986 5 
1 red  14  9 1986 5 
2 blue  10  1 1990 3 
3 pink  70  5 1970 7 
3 blue  70  6 1970 7 
3 blue  17  2 1970 7 

我尝试了好几种方法,但这些行要么不能循环,让反复向下计数coulmn相同的值。我试过as.character(),因为其中一列是非数字的。

我认为,理想的解决办法来用每个ID的3列值的列表,然后在列表中算独特的价值,但我不知道如何做到这一点的R.似乎在Python

简单

回答

3

通过“ID”分组之后,我们得到“颜色”,“街”,“公寓”和sum一起到mutaten_distinct与“计数”列

library(dplyr) 
df1 %>% 
    group_by(ID) %>% 
    mutate(Count = sum(c(n_distinct(Color), n_distinct(Street), n_distinct(Apt)))) 
# A tibble: 6 x 6 
# Groups: ID [3] 
#  ID Color Street Apt Year Count 
# <int> <chr> <int> <int> <int> <int> 
#1  1 blue 142  8 1986  5 
#2  1 red 142  9 1986  5 
#3  2 blue 102  1 1990  3 
#4  3 pink  70  5 1970  7 
#5  3 blue  70 20 1970  7 
#6  3 blue 107  2 1970  7 
+0

谢谢。但是,这是我使用的方法,它返回了重复相同值的计数列,即整个数据集上的n_dictinct值。在这种情况下,15. – codekoala

+0

@codekoala也许你使用过'plyr :: mutate',使用'dplyr :: mutate(Count = ...' – akrun