如何将两个不同的ID协调为一个,然后应用于具有两个ID的df,但在R中仅对主题计数一次?
我对同一个受试者患者有两个不同的ID。 在另一个ID向量中,两个ID都在其中,表示同一个患者。如何只计算一个ID1患者,而不是两个ID不同的患者如何将两个不同的ID协调为一个,然后应用于具有两个ID的df,但在R中仅对主题计数一次?,r,join,data-wrangling,R,Join,Data Wrangling,我对同一个受试者患者有两个不同的ID。 在另一个ID向量中,两个ID都在其中,表示同一个患者。如何只计算一个ID1患者,而不是两个ID不同的患者 ID1 ID2 11 12 13 14 15 16 载体 11,12,13,13,14,16 我只想按ID1计算唯一的患者,这样我就可以 x=11,13,15 谢谢大家! 为每个患者创建一个唯一的ID号,以长格式获取数据,使两个ID位于同一列中,将其与向量连接,选择向量值以获得不同的ID值 资料 我想你可能需要这个 df %>% f
ID1 ID2
11 12
13 14
15 16
载体
11,12,13,13,14,16
我只想按ID1计算唯一的患者,这样我就可以
x=11,13,15
谢谢大家! 为每个患者创建一个唯一的ID号,以长格式获取数据,使两个ID位于同一列中,将其与向量连接,选择向量值以获得不同的ID值
资料
我想你可能需要这个
df %>% filter((ID1 %in% vector) | (ID2 %in% vector)) %>%
select(ID1)
ID1
1 11
2 13
3 15
用更好的样品检查一下
df <- structure(list(ID1 = c(11L, 13L, 15L, 17L, 19L, 21L), ID2 = c(12L,
14L, 16L, 18L, 20L, 22L)), class = "data.frame", row.names = c(NA,
-6L)
> df
ID1 ID2
1 11 12
2 13 14
3 15 16
4 17 18
5 19 20
6 21 22
vector <- c(11, 12, 13, 13, 14, 16, 18, 18)
> df %>% filter((ID1 %in% vector) | (ID2 %in% vector)) %>% select(ID1)
ID1
1 11
2 13
3 15
4 17
通过选择带有apply to subset ID1的行,您可以使用带有%in%的任意行
或者使用行和
数据:
输出不是应该是11,13,16吗?不,按ID1计算,那么为什么需要向量呢?那就是df$ID1?如果这不是你想要的,也许可以提供一个更好的例子。我认为OP只需要ID1的结果。请在我的答案末尾看到您的代码中有细微的修改。
df %>% filter((ID1 %in% vector) | (ID2 %in% vector)) %>%
select(ID1)
ID1
1 11
2 13
3 15
df <- structure(list(ID1 = c(11L, 13L, 15L, 17L, 19L, 21L), ID2 = c(12L,
14L, 16L, 18L, 20L, 22L)), class = "data.frame", row.names = c(NA,
-6L)
> df
ID1 ID2
1 11 12
2 13 14
3 15 16
4 17 18
5 19 20
6 21 22
vector <- c(11, 12, 13, 13, 14, 16, 18, 18)
> df %>% filter((ID1 %in% vector) | (ID2 %in% vector)) %>% select(ID1)
ID1
1 11
2 13
3 15
4 17
df %>%
mutate(ID = row_number()) %>%
tidyr::pivot_longer(cols = c(ID1, ID2)) %>%
inner_join(tibble::enframe(vector), by = 'value') %>%
distinct(ID, .keep_all = T) %>%
select(ID, value) %>%
inner_join(df %>% mutate(ID = row_number()), by = 'ID') %>%
select(ID1)
ID$ID1[apply(ID, 1, function(z) any(v %in% z))]
#[1] 11 13 15
ID$ID1[rowSums(sapply(ID, "%in%", v)) > 0]
#[1] 11 13 15
ID <- read.table(header=TRUE, text="ID1 ID2
11 12
13 14
15 16")
v <- c(11,12,13,13,14,16)