[英]Is there an R function for merging two dataframes by ratio
我有兩個如下數據集。
df1=data.frame(o=c(1,1,1,1,2,2,2,2,3,3,3,3))
df2=data.frame(o=c(1,1,2,2,3,3), ratio=c(0.75,0.25,0.25,0.75,0.5,0.5),
d=c('a','b','a','b','a','b'))
> df1
o
1 1
2 1
3 1
4 1
5 2
6 2
7 2
8 2
9 3
10 3
11 3
12 3
> df2
o ratio d
1 1 0.75 a
2 1 0.25 b
3 2 0.25 a
4 2 0.75 b
5 3 0.50 a
6 3 0.50 b
兩個數據框中“o”列中的值是相同的值。 我想通過數據幀中的“o”列和df2中的比率合並兩個數據幀,如下所示(手工制作)。
> df_final
o d
1 1 a
2 1 a
3 1 a
4 1 b
5 2 a
6 2 b
7 2 b
8 2 b
9 3 a
10 3 a
11 3 b
12 3 b
這是一個想法。 我們可以先加入數據,計算每個字母的數量並根據長度創建列表,然后取消嵌套數據框。
library(dplyr)
library(tidyr)
df3 <- df2 %>%
left_join(df1 %>% count(o), by = "o") %>%
mutate(n2 = n * ratio) %>%
rowwise() %>%
mutate(d2 = list(rep(d, n2))) %>%
unnest(cols = "d2") %>%
select(o, d = d2)
df3
# # A tibble: 12 x 2
# o d
# <dbl> <chr>
# 1 1 a
# 2 1 a
# 3 1 a
# 4 1 b
# 5 2 a
# 6 2 b
# 7 2 b
# 8 2 b
# 9 3 a
# 10 3 a
# 11 3 b
# 12 3 b
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.