合并数据框,保留数据集 A 中的所有行

Merge dataframes keeping all rows from dataset A

我正在尝试根据数据集 A 中的值合并两个数据集(A 和 B)。理想情况下,生成的数据集应包括数据集 A 中的所有元素,并且仅匹配数据集 B 中的结果。数据集 A 包含重复项(即,同一个词的多个实例)。使用 left_join 或合并,重复项不会从数据集 B 中获得相应的值(只是 NA)。为了规避这个问题,我使用了下面的代码:

word <- c('cat', 'house', 'cat', 'dog')
words <- as.data.frame(word)

freq <- runif(5)
sub <- as.data.frame(freq)
sub$word <- c('house', 'bottle', 'cat', 'chair', 'dog')


for(i in 1:length(words$word)){
  if (words$word[i] %in% sub$word) {
    words$freq[i] <- sub$freq[sub$word == words$word[i]]
  }
}

然而,如果我这样做,我会收到一长串警告消息(“要替换的项目数不是替换长度的倍数”),尽管输出对我来说完全没问题。

谁能帮我弄清楚问题出在哪里?

谢谢!

你可以使用 merge:

word <- c('cat', 'house', 'cat', 'dog')
words <- data.frame(word)

set.seed(42)

freq <- runif(5)
sub <- data.frame(freq)
sub$word <- c('house', 'bottle', 'cat', 'chair', 'dog')

merge(words, sub, by = "word", all.x = TRUE)
#>    word      freq
#> 1   cat 0.2861395
#> 2   cat 0.2861395
#> 3   dog 0.6417455
#> 4 house 0.9148060