我正在使用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连接到它自己。有更好的方法吗?
答案 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)