2014-11-03 307 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

相關問題