簡體   English   中英

是否有用於按比例合並兩個數據幀的 R function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM