我正在尝试从R数据框中提取一行中具有重复值但另一列中具有0或1的行。
例如,如果这是数据帧:
Data <- data.frame(
+ X = c(1,3,5,7,7,8,9,10,10,11,11),
+ Y = sample(36476545:36476555),
+ timepoint = c(0,1,0,0,1,1,0,1,0,1,1)
+ )
类似于
> Data
X Y timepoint
1 1 36476549 0
2 3 36476545 1
3 5 36476552 0
4 7 36476547 0
5 7 36476546 1
6 8 36476548 1
7 9 36476551 0
8 10 36476555 1
9 10 36476553 0
10 11 36476554 1
11 11 36476550 1
我想要的输出将是所有值都在X中重复的行,其中一次出现该值的时间点= 0,另一次出现的时间点= 1,结果
> Data
X Y timepoint
4 7 36476547 0
5 7 36476546 1
8 10 36476555 1
9 10 36476553 0
请注意,由于这两种情况下的时间点变量均为1,因此也不会计算在X中重复的最后两个数据。 有一个solution in SQL接近,但我不知道如何在R中进行编码。
解决方案,我首先尝试创建重复项的数据框,然后尝试从那里获取我想要的数据框:
dupes <- Data[Data$X %in%
Data$X[duplicated(Data$X)],]
ids <- Data$X[Data$timepoint==0]
Data[Data$X %in% ids,]
但是这将返回没有重复条目的行。任何帮助,将不胜感激,谢谢!
答案 0 :(得分:2)
是您要找的吗?
library(dplyr)
Data <- data.frame(
X = c(1,3,5,7,7,8,9,10,10,11,11),
Y = sample(36476545:36476555),
timepoint = c(0,1,0,0,1,1,0,1,0,1,1)
)
Data %>%
group_by(X) %>%
filter(dplyr::n_distinct(timepoint) == 2)
n_distinct
返回向量中不同元素的数量。由于使用group by语句,因此仅返回每个组(X)具有两个不同时间点的行。
dplyr::n_distinct(c(1, 2, 1, 3, 1))
Data %>%
group_by(X) %>%
mutate(n_distinct = dplyr::n_distinct(timepoint))