Comparing one value across multiple rows in one data frame with values across multiple rows in a second data frame
场景:
2列dataframe_1(300,000行)
头(dataframe_1):
CHR POS
1 2000
1 3000
2 1500
3 3000
3列dataframe_2(300行)
头(dataframe_2):
CHR POS_START POS_END
1 1500 2500
1 3200 4000
2 1200 1600
2 2000 2200
3 5000 5500
4 1000 1200
目标是获取dataframe_1,并将每行的POS列与dataframe_2(列POS_START和POS_END)进行比较,并返回一个向量(长度= nrow(dataframe_1)),该向量指示dataframe_1的哪一行列出了POS值,其范围为在dataframe_2中指示。
请注意,每个POS值都链接到特定的CHR值。
示例返回向量:
CHR POS示例_RETURN_VECTOR
1 2000是
1 3000假
2 1500是
3 3000假
这里最好的策略是什么?
谢谢!
这是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | library(dplyr) df1 <- tribble( ~CHR, ~POS, 1, 2000, 1, 3000, 2, 1500, 3, 3000 ) df2 <- tribble( ~CHR, ~POS_START, ~POS_END, 1, 1500, 2500, 1, 3200, 4000, 2, 1200, 1600, 2, 2000, 2200, 3, 5000, 5500, 4, 1000, 1200 ) df1 %>% left_join(df2, by = 'CHR') %>% mutate(IN_RANGE = POS >= POS_START & POS <= POS_END) %>% group_by(CHR, POS) %>% summarize(IN_RANGE = sum(IN_RANGE) > 0) |
我们可以假设每个
1 | dataframe_1['NEW_COLUMN'] = dataframe_1.POS >= dataframe_2.POS_START & dataframe_1.POS <= dataframe_2.POS_END |
如果您不能做所有这些假设,则可以:
1)合并两个具有匹配的
2)循环遍历