我有两个数据帧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中的任何记录都不匹配,那么就可以了。
由于
答案 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