2017-10-11 67 views
-2

我想要通過多個變量對數據集進行分組,而不是對這些組進行編號。當我只用一個變量對group_indices使用dplyr進行分組時,我可以使用id組。 但我想通過對至少一個變量集中的至少一個賦值相同的值來對案例進行分組,然後確定屬於的組案例。如何在R中做到這一點?在R中至少有三個共同變量的例子

我有以下數據集

NPI name adress phone 
    1 1 1  1   
    2 1 1  1 
    3 2 2  2 
    4 2 3  3 
    5 3 4  4 
    6 3 4  5 
    7 4 5  6 
    8 5 6  6 
    9 6 7  7 
    10 7 8  8 
    11 1 9  9  

我想,當他們有共同的三個I上市(姓名,ADRESS,PHONENUMBER)中的至少一個變量來進行分組的情況。 對於彼此具有最多共同點的案例,應該將它們分組在共同點最少的案例中。 所以我想創建一個分組變量,如果它們在同一個組中,它將給出相同的值。 你可以假設名稱>地址的層次>手機

NPI name adress phone org 
    1 1 1  1  1  
    2 1 1  1  1 
    3 2 2  2  2 
    4 2 3  3  2 
    5 3 4  4  3 
    6 3 4  5  3 
    7 4 5  6  4 
    8 5 6  6  4 
    9 6 7  7  5 
    10 7 8  8  6 
    11 1 9  9  1 

在我的真實數據集,我沒有數字,但姓名,實際地址和電話號碼。所以我正在使用的所有變量都是字符串變量。

+0

爲什麼是最後一個值1 – akrun

+0

因爲它的股票名稱與前兩種情況 –

+0

我們是否可以假設一個層次(看起來暗示)。如:姓名>地址>組織? – jacobsg

回答

0

dplyr試試這個:

library(dplyr) 

df %>% 
    arrange(name, adress, phone) %>% 
    mutate(group = c(1, ifelse((name != lag(name)) & (adress != lag(adress)) & (phone != lag(phone)), 1, 0)[-1]), 
     group = cumsum(group)) %>% 
    arrange(NPI) 

結果:

NPI name adress phone group 
1 1 1  1  1  1 
2 2 1  1  1  1 
3 3 2  2  2  2 
4 4 2  3  3  2 
5 5 3  4  4  3 
6 6 3  4  5  3 
7 7 4  5  6  4 
8 8 5  6  6  4 
9 9 6  7  7  5 
10 10 7  8  8  6 
11 11 1  9  9  1 

注:

這個工程即使nameadressphone都是字符。只要id列(NPI)是數字,最終的data.frame將按正確的順序排列。

數據:

df = read.table(text = " NPI name adress phone 
       1 1 1  1   
       2 1 1  1 
       3 2 2  2 
       4 2 3  3 
       5 3 4  4 
       6 3 4  5 
       7 4 5  6 
       8 5 6  6 
       9 6 7  7 
       10 7 8  8 
       11 1 9  9 ", header = TRUE) 

library(dplyr) 
df = df %>% mutate_at(vars(-NPI), as.character) 
+0

謝謝useR幫助我,但是我沒有提到的是我正在工作與字符串變量,因此我不能安排他們,所以這個方法似乎並不工作,當我將它應用到我的實際數據集。 –

+0

@BoazKaarsemaker你可以安排字符串變量,只是它的順序與你訂購數字變量時不同。所以我的解決方案將工作,只要你的id列('NPI')是數字。即使不是,唯一會被搞砸的是最後一行的排序。 'group'變量仍然可以正確創建。查看我的更新。注意,下次如果您的原始列是字符,請不要將它們提供爲數字。 – useR

+0

當我使用您提供的代碼我得到的錯誤: 錯誤在arrange_impl(.data,點): 不正確的大小(1)在位置1,期待:2322 我想這可能是由於該變量也是字符串,並試圖通過使用s_dplyr有人使用字符串的代碼解決此問題,但我無法解決它。 –

相關問題