【发布时间】:2019-07-02 04:09:14
【问题描述】:
我正在尝试从我的 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 中重复的所有行,其中 timepoint = 0 表示一次出现的值,1 表示另一次出现,导致
> Data
X Y timepoint
4 7 36476547 0
5 7 36476546 1
8 10 36476555 1
9 10 36476553 0
请注意,最后两项数据在 X 中也是重复的,因为在这两种情况下时间点变量都是 1,所以不计算在内。 有一个 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,]
但这会返回没有重复条目的行。任何帮助将不胜感激,谢谢!
【问题讨论】:
-
使用拆分并测试每个子 dfrm 中是否存在 0 和 1。
标签: r dataframe dplyr duplicates subset