R - 如何根据比例连接两个表

时间:2018-03-26 21:35:27

标签: r

我有两个数据帧a和b,并希望加入或"分配" b中的行到a中的行,按比例基于。

中的列

例如:

a = data_frame(color = c("red", "blue", "green", "orange"), n = c(1000, 500, 300, 200))
a = a %>% mutate(proportion = n / sum(n))

b = data_frame(record = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"))

c = data_frame(record = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j"),
               color = c("red", "red", "red", "red", "red", "blue", "blue", "blue", "green", "orange"),
               proportion = c(".5", ".5", ".5", ".5", ".5", ".25", ".25", ".25", ".15", ".1"))

例如,我希望生成的data.frame,c包含所有每个"记录"来自b加入" color",基于a中每种颜色的比例。

希望我的例子很清楚,但希望它可以使用不均匀的数字,并且如果a中的给定记录与b中的任何记录都不匹配,那么就可以了。

由于

3 个答案:

答案 0 :(得分:3)

这种方法怎么样:

set.seed(1)
a %>%
   sample_n(size = nrow(b), replace = TRUE, weight = proportion) %>%
   bind_cols(b)

#output:
# A tibble: 10 x 4
   color      n proportion record
   <chr>  <dbl>      <dbl> <chr> 
 1 red    1000.      0.500 a     
 2 red    1000.      0.500 b     
 3 blue    500.      0.250 c     
 4 orange  200.      0.100 d     
 5 red    1000.      0.500 e     
 6 green   300.      0.150 f     
 7 orange  200.      0.100 g     
 8 blue    500.      0.250 h     
 9 blue    500.      0.250 i     
10 red    1000.      0.500 j     

来自nrow(b)的{​​{1}}行替换,权重等于比例

答案 1 :(得分:1)

在您的数据框a中,颜色以正确的比例存在。因此,您需要在数据框sample with replacement的行a中完成所有操作:

library(data.table)
c=cbind(b,as.data.table(a)[sample(1:nrow(a),nrow(b),replace=TRUE),])

用这个你不需要比例变量

答案 2 :(得分:1)

使用data.table的{​​{1}}方法。方法是首先根据join中的比例计算rows b的范围。在行范围内加入a并加a

b