我知道聚合是获取相同内容/单词的方法,但如果它们在两个数据帧中分开则会发生什么。我有一个相当复杂的数据框,但我将在下面简化它只是为了解决核心问题。
让我们说数据框都在
之下D1:
word freq
beaten 1
pizza 120
test 5
D2:
word freq
beaten 2
pizza 65
test 3
如何实现以下目标?
结果:
word freq
beaten 1/(1+2)
pizza 120/(65+120)
test 5/(5+3)
提前致谢
答案 0 :(得分:0)
我们可以使用merge
按word
合并两个数据框,然后将freq
的每个D1
列除以freq
中的D1
之和1}}和D2
。
df <- merge(D1, D2, by="word")
result <- data.frame(df[1], freq = df$freq.x/rowSums(df[-1]))
result
# word freq
#1 beaten 0.3333333
#2 pizza 0.6486486
#3 test 0.6250000
如果word
和D1
D2
订单相同,我们可以直接使用
data.frame(D[1], freq = D1$freq/(D1$freq + D2$freq))
答案 1 :(得分:0)
我们可以通过rbind
两个数据集以更简单的方式完成此操作,按照&#39; word&#39;分组,得到&#39; freq&#39;的第一个元素的比率。使用&{39; freq&#39;
sum
library(data.table)
rbindlist(list(D1, D2))[, .(freq= freq[1]/sum(freq)), word]
# word freq
#1: beaten 0.3333333
#2: pizza 0.6486486
#3: test 0.6250000
或tidyverse
library(dplyr)
bind_rows(D1, D2) %>%
group_by(word) %>%
summarise(freq = first(freq)/sum(freq))
# A tibble: 3 × 2
# word freq
# <chr> <dbl>
#1 beaten 0.3333333
#2 pizza 0.6486486
#3 test 0.6250000
或使用aggregate
中的base R
使用类似的方法
aggregate(freq~word, rbind(D1, D2), function(x) x[1]/sum(x))