2017-10-11 104 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有人使用字符串的代码解决此问题,但我无法解决它。 –

相关问题