2014-11-03 172 views
0

我使用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 

谢谢您的回答

+0

如果 “自卑” 是行你的“列表B”中有3个?也许你只是在寻找一个'merge()'.. – 2014-11-03 15:22:19

+0

那些看起来像数据框,而不是列表。是这样吗? – 2014-11-03 15:22:42

+0

正确,不是列表。它们都是数据帧。 – 2014-11-03 15:26:37

回答

1

这是一种方法。

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)) 
+0

我收到以下错误消息:错误:无法加入列'V1'x'X.WORD':索引超出界限 – 2014-11-03 15:52:07

+0

@RogerSánchezNa感谢您的留言。我用数据测试了代码。它在我的机器上运行。你可以仔细检查一下吗? – jazzurro 2014-11-03 16:22:30

2

这只是一个任务简单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)) 
+0

是的,这个解决方案工作正常。谢谢大卫。 – 2014-11-03 15:56:33

相关问题