删除RecordLinkage中的循环

时间:2015-05-11 18:42:11

标签: r

我正在使用R中的RecordLinkage包来重复数据集。 RecordLinkage包中的重复数据输出包含循环。

例如:

表格链接

    id name           id2  name2  
    1  Jane Johnson   5    Jane Johnson  
    5  Jane Johnson   17   Jane Johnson

我正在尝试创建一个表,列出与记录循环中所有其他id号相关联的每个id。

例如:

    id1  id2  id3  Name  
    1    5    17   Jane Johnson

    Name          Ids
    Jane Johnson  1,5,17

这可能在R?我尝试使用sqldf包将数据集连接到自身多次,以尝试将所有id放在同一行上。

例如:

    rlinkage2 <-sqldf('select a.id, 
    a.id2, 
    b.id as id3
    b.id2 as id4
    from rlinkage a
    left join rlinkage b
    on a.id = b.id
    or a.id = b.id2
    or a.id2 = b.id
    or a.id2 = b.id2')

这会创建一个非常混乱的数据集,并且不会将所有id放在同一行上,除非我多次将表rlinkage连接到它自己。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

1)sqldf 要使用sqldf联合两组列,然后使用group_concat

sqldf("select name, group_concat(distinct id) ids from (
         select id, name from rlinkage 
         union 
         select id2 id, name2 name from rlinkage
       ) group by name")

,并提供:

          name    ids
1 Jane Johnson 1,5,17

2)rbind / aggregate 使用普通R:

long <- rbind(rlinkage[1:2], setNames(rlinkage[3:4], names(rlinkage)[1:2]))
aggregate(id ~ name, long, function(x) toString(unique(x)))

,并提供:

          name       id
1 Jane Johnson 1, 5, 17

注意:我们将此作为数据使用:

Lines <- "id,name,id2,name2
1,Jane Johnson,5,Jane Johnson
5,Jane Johnson,17,Jane Johnson"

rlinkage <- read.csv(text = Lines, as.is = TRUE)