我在R中的以下两个dataframes:比较并合并两个dataframes
df1 = data.frame(c("A", "A", "A", "B", "B"), c(1, 11, 21, 35, 45), c(6, 20, 30, 40, 60), c(1, 2, 3, 4, 5))
colnames(df1) = c("X", "Y", "Z", "score")
df1
X Y Z score
1 A 1 6 1
2 A 11 20 2
3 A 21 30 3
4 B 35 40 4
5 B 45 60 5
df2 = data.frame(c("A", "A", "A", "A", "B", "B", "B", "C"), c(1, 6, 21, 50, 20, 31, 50, 10), c(5, 20, 30, 60, 30, 40, 60, 20), c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8"))
colnames(df2) = c("X", "Y", "Z", "out")
df2
X Y Z out
1 A 1 5 x1
2 A 6 20 x2
3 A 21 30 x3
4 A 50 60 x4
5 B 20 30 x5
6 B 31 40 x6
7 B 50 60 x7
8 C 10 20 x8
对于DF1每一行,我要检查:
- 有与'价值匹配如果上述条件成立,我想检查'Y'和'Z'的值是否在值'Y'和'Z'的范围内df2
- 如果两者都是真的,那么我想添加th e值从'out'到df1。
这是输出应该什么样子:
output = data.frame(c("A", "A", "A", "B", "B"), c(1, 11, 21, 35, 45), c(6, 20, 30, 40, 60), c(1, 2, 3, 4, 5), c("x1, x2", "x2", "x3", "x4", "x5"))
colnames(output) = c("X", "Y", "Z", "score", "out")
X Y Z score out
1 A 1 6 1 x1, x2
2 A 11 20 2 x2
3 A 21 30 3 x3
4 B 35 40 4 x6
5 B 45 60 5 x7
原来DF1保持与添加一个额外的列“出来”。
第1行来自'output',在'out'列中包含'x1,x2'。原因:列“X”中的值与范围1至6中的值与df2中的行1和2重叠。
我在(Compare values from two dataframes and merge)之前询问过此问题,建议使用foverlaps
函数。但是由于df1和df2之间的列不同以及df2中的额外行,我无法使其工作。
我怎样才能设置变量“stringAsFactors = F”对于一个已经存在的数据帧? – user1987607
首先,尝试运行带有'factor'变量相同的过程,因为它可能将它们转换当它尝试加入不同级别的因素时,将其转换为“字符” – AntoniosK
@AntioniosK:我的df1有9000行,我的df2有862行,您的代码可以很流畅地处理一个小子集,但是对于完整的数据,它需要很长时间我想...... – user1987607