R 将一个数据帧中跨多行的一个值与第二个数据帧中跨多行的值进行比较
情景: 2列数据帧_1(300000行) 头部(数据帧_1): CHR POS 2000年1月 1 3000 21500 33000 3列数据帧_2(300行) 头部(数据帧2): CHR位置开始位置结束 1500 2500 13204000 21200 1600 20002200 35005500 4 1000 1200 目标是获取dataframe_1并将每行的POS列与dataframe_2(列POS_开始和POS_结束)进行比较,并返回一个向量(长度=nrow(dataframe_1)),该向量指示dataframe_1的哪一行列出了在dataframe_2中所示范围内的POS值。 请注意,每个POS值都链接到特定的CHR值 返回向量示例: CHR POS示例返回向量 2000对 1 3000个错误 21500对 三千个假 这里最好的策略是什么R 将一个数据帧中跨多行的一个值与第二个数据帧中跨多行的值进行比较,r,R,情景: 2列数据帧_1(300000行) 头部(数据帧_1): CHR POS 2000年1月 1 3000 21500 33000 3列数据帧_2(300行) 头部(数据帧2): CHR位置开始位置结束 1500 2500 13204000 21200 1600 20002200 35005500 4 1000 1200 目标是获取dataframe_1并将每行的POS列与dataframe_2(列POS_开始和POS_结束)进行比较,并返回一个向量(长度=nrow(dataframe_1))
谢谢 我们可以假设每个
CHR
值只出现一次吗?我们还可以假设出现在dataframe_1
中的每个CHR
值也出现在dataframe_2
中,反之亦然吗?我们还可以假设两个表都是按CHR
值排序的吗?如果是这样,您可以创建一个新列,如下所示:
dataframe_1['NEW_COLUMN'] = dataframe_1.POS >= dataframe_2.POS_START & dataframe_1.POS <= dataframe_2.POS_END
dataframe\u 1['NEW\u COLUMN']=dataframe\u 1.POS>=dataframe\u 2.POS\u START&dataframe\u 1.POS下面是一个带有dplyr
的答案:
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)
库(dplyr)
df1%
突变(在位置范围内=位置>=位置开始和位置%
分组依据(CHR,POS)%>%
汇总(范围内=总和(范围内)>0)
谢谢!这正是我想要的。@RobertDurruthy Durruthy真棒!你能接受我的回答吗?