我有一个带有变量的data.frame,其中包含众多参与者的名字。参与者的名称都包含为一个(= 1)长字符串,其名称用逗号分隔。有些名字是重复的。我试着只给每个名字一次。
数据下方。
我将长串名称转换为列表:
b$s <- strsplit(b$participants, ",")
然后我删除了名称两边的空格以标准化它们。
library(stringr)
b.l <- unlist(b$s)
b.l <- str_trim(b.l, side="both")
从这个列表中我获取了唯一值
b.l <- unique(unlist(b.l))
结果是所有唯一名称:
"Takfir wa'l Hijra" "AIS" "GIA" "AQIM" "MUJAO" "FLEC-R" "FLEC-FAC"
但是,此列表包含所有唯一名称。我想仅针对每个ID(会话号)执行这些步骤,这也可能是重复的。
我尝试用ddply执行上面的操作,但无济于事。有什么建议?不幸的是,我对列表的处理不是很熟悉。
最终,数据框应如下所示:
id unique.participants
1-191 Takfir wa'l Hijra, AIS, GIA, AQIM, MUJAO
1-191 Takfir wa'l Hijra, AIS, GIA, AQIM, MUJAO
1-192 FLEC-R, FLEC-FAC
非常感谢。
data.frame:
b<–structure(list(id = structure(c(1L, 1L, 2L), .Label = c("1-191",
"1-192", "1-131"), class = "factor"), participants = c("Takfir wa'l Hijra,AIS,AIS, GIA,AIS, GIA,AIS, GIA,AIS, GIA,AIS, GIA,GIA,AQIM, GIA,AQIM, GIA,AQIM, GIA,AQIM, GIA,AQIM, GIA,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM, MUJAO,AQIM",
"Takfir wa'l Hijra,AIS,AIS, GIA,AIS, GIA,AIS, GIA,AIS, GIA,AIS, GIA,GIA,AQIM, GIA,AQIM, GIA,AQIM, GIA,AQIM, GIA,AQIM, GIA,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM,AQIM, MUJAO,AQIM",
"FLEC-R,FLEC-FAC, FLEC-R,FLEC-FAC,FLEC-FAC, FLEC-R,FLEC-FAC,FLEC-FAC, FLEC-R,FLEC-FAC,FLEC-FAC,FLEC-FAC"
), s = list(c("Takfir wa'l Hijra", "AIS", "AIS", " GIA", "AIS",
" GIA", "AIS", " GIA", "AIS", " GIA", "AIS", " GIA", "GIA", "AQIM",
" GIA", "AQIM", " GIA", "AQIM", " GIA", "AQIM", " GIA", "AQIM",
" GIA", "AQIM", "AQIM", "AQIM", "AQIM", "AQIM", "AQIM", "AQIM",
"AQIM", "AQIM", " MUJAO", "AQIM"), c("Takfir wa'l Hijra", "AIS",
"AIS", " GIA", "AIS", " GIA", "AIS", " GIA", "AIS", " GIA", "AIS",
" GIA", "GIA", "AQIM", " GIA", "AQIM", " GIA", "AQIM", " GIA",
"AQIM", " GIA", "AQIM", " GIA", "AQIM", "AQIM", "AQIM", "AQIM",
"AQIM", "AQIM", "AQIM", "AQIM", "AQIM", " MUJAO", "AQIM"), c("FLEC-R",
"FLEC-FAC", " FLEC-R", "FLEC-FAC", "FLEC-FAC", " FLEC-R", "FLEC-FAC",
"FLEC-FAC", " FLEC-R", "FLEC-FAC", "FLEC-FAC", "FLEC-FAC"))), .Names = c("id",
"participants", "s"), row.names = c(1L, 2L, 24L), class = "data.frame")
答案 0 :(得分:3)
使用ddply
可以执行此操作
library(plyr)
ddply(b,~id,summarise,
nn= paste(unique(unlist(strsplit(participants,','))),collapse=','))
id nn
1 1-191 Takfir wa'l Hijra,AIS, GIA,GIA,AQIM, MUJAO
2 1-192 FLEC-R,FLEC-FAC, FLEC-R
答案 1 :(得分:2)
within
对此有好处。它允许重新分配表达式中的变量。此外,您可以在strsplit
中调整正则表达式,以便一次性删除这些空格和逗号。
> within(b[-3],{
unique.participants <- sapply(strsplit(participants, "(,)|(, )"), unique)
rm(participants)
})
# id unique.participants
# 1 1-191 Takfir wa'l Hijra, AIS, GIA, AQIM, MUJAO
# 2 1-191 Takfir wa'l Hijra, AIS, GIA, AQIM, MUJAO
# 24 1-192 FLEC-R, FLEC-FAC
因为我看到了
我想仅针对每个ID(会话号)执行这些步骤,这也可能是重复的。
在你的问题中,我坚持使用重复的行。