2017-10-13 49 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