合并数据框,保留数据集 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
我正在尝试根据数据集 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