比较列表的第一个元素与另一个列表
我使用R和需要的提示来解决我的问题:比较列表的第一个元素与另一个列表
我有两份名单,我想“一”与比较列表的第一行中的值列表“b”的第一行的值。如果元素存在,我想将列表“b”的第二行的值写入列表“a”的第二行。
所以,这里是列表 “一”:
X.WORD FREQ
abase 0
abased 0
abasing 0
abashs 0
在此列出 “B”
V1 V2
arthur 11
abased 29
turtle 9
abash 2
结果应该是
X.WORD FREQ
abase 0
abased 29
abasing 0
abashs 0
谢谢您的回答
这是一种方法。
library(dplyr)
ana <- foo %>%
left_join(foo2, by = c("X.WORD" = "V1")) %>%
select(-FREQ) %>%
rename(FREQ = V2)
ana$FREQ[is.na(ana$FREQ)] <- 0
# X.WORD FREQ
#1 abase 0
#2 abased 29
#3 abasing 0
#4 abashs 0
数据
foo <- structure(list(X.WORD = structure(c(1L, 2L, 4L, 3L), .Label = c("abase",
"abased", "abashs", "abasing"), class = "factor"), FREQ = c(0L,
0L, 0L, 0L)), .Names = c("X.WORD", "FREQ"), class = "data.frame", row.names = c(NA,
-4L))
foo2 <- structure(list(V1 = structure(c(3L, 1L, 4L, 2L), .Label = c("abased",
"abash", "arthur", "turtle"), class = "factor"), V2 = c(11L,
29L, 9L, 2L)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA,
-4L))
我收到以下错误消息:错误:无法加入列'V1'x'X.WORD':索引超出界限 – 2014-11-03 15:52:07
@RogerSánchezNa感谢您的留言。我用数据测试了代码。它在我的机器上运行。你可以仔细检查一下吗? – jazzurro 2014-11-03 16:22:30
这只是一个任务简单merge
在基础R
Res <- merge(a, b, by.x = "X.WORD", by.y = "V1", all.x = TRUE)[, -2]
Res$V2[is.na(Res$V2)] <- 0
Res
# X.WORD V2
# 1 abase 0
# 2 abased 29
# 3 abashs 0
# 4 abasing 0
数据
a <- structure(list(X.WORD = structure(c(1L, 2L, 4L, 3L), .Label = c("abase",
"abased", "abashs", "abasing"), class = "factor"), FREQ = c(0L,
0L, 0L, 0L)), .Names = c("X.WORD", "FREQ"), class = "data.frame", row.names = c(NA,
-4L))
b <- structure(list(V1 = structure(c(3L, 1L, 4L, 2L), .Label = c("abased",
"abash", "arthur", "turtle"), class = "factor"), V2 = c(11L,
29L, 9L, 2L)), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA,
-4L))
是的,这个解决方案工作正常。谢谢大卫。 – 2014-11-03 15:56:33
如果 “自卑” 是行你的“列表B”中有3个?也许你只是在寻找一个'merge()'.. – 2014-11-03 15:22:19
那些看起来像数据框,而不是列表。是这样吗? – 2014-11-03 15:22:42
正确,不是列表。它们都是数据帧。 – 2014-11-03 15:26:37