使用R访问列表中的项目,在拆分和应用后组合

时间:2015-02-24 17:45:54

标签: r plyr dplyr lapply

我刚刚开始用R清理琴弦,到目前为止已经学到了很多东西。我所坚持的当前项目的一部分(我认为)主要与列表中的引用值有关。我正在尝试使用split-apply-combine方法,但最终无法回到我想要的数据形式。

我尝试了which()unlist()any()的各种排列,但似乎无法得到我想要的东西 - 所以我坐下来,要求你的帮助。感谢。

我有很长的字符串列表......

> dput(x) 

list(c("ACETATE", "RINGERS"), "ACETYLCYSTEINE", c("ACETYLSALICYLIC", 
"ACID"), "ADIRAMYCIN", c("ADRENALINE", "00003901"), "ALEMTUZUMAB")

> x

[[1]]
[1] "ACETATE" "RINGERS"

[[2]]
[1] "ACETYLCYSTEINE"

[[3]]
[1] "ACETYLSALICYLIC" "ACID"           

[[4]]
[1] "ADIRAMYCIN"

[[5]]
[1] "ADRENALINE" "00003901"  

[[6]]
[1] "ALEMTUZUMAB"

我编写了简单的代码来删除列表中的特定单词...

bad.words <- c("ACID", "BASE", "HYDROCHOLIRDE", "STUFF")
a <- lapply(x, function(x) x %in% bad.words) 

> a

[[1]]
[1] FALSE FALSE

[[2]]
[1] FALSE

[[3]]
[1] FALSE  TRUE

[[4]]
[1] FALSE

[[5]]
[1] FALSE FALSE

[[6]]
[1] FALSE

我希望能够创建z,使x成为bad.words

> z

[[1]]
[1] "ACETATE" "RINGERS"

[[2]]
[1] "ACETYLCYSTEINE"

[[3]]
[1] "ACETYLSALICYLIC"           

[[4]]
[1] "ADIRAMYCIN"

[[5]]
[1] "ADRENALINE" "00003901"  

[[6]]
[1] "ALEMTUZUMAB"

1 个答案:

答案 0 :(得分:4)

你快到了那里:

lapply(x, function(z) z[! (z %in% bad.words)])

或者,您可以

lapply(x, function(z) setdiff(z,bad.words))

对我来说似乎更优雅。