【发布时间】:2016-09-30 17:51:32
【问题描述】:
这是 Kikapp 的answer 的后续问题。
我想删除缺少所有时间点的参与者 ID。换句话说,我想选择所有四个时间(11、21、31、41)的行。见样本数据dropbox link
这是我根据 Kikapp 的回答进行的尝试。由于某种原因,它不起作用。让我知道如何让它变得更好。
data2 <- df[df$ID %in% names(table(df$ID))[table(df$ID) > 3],]
time == 11、time == 21、time == 41 得到 4695 行或对象或 ID,而 time == 31 得到 4693 个;但是,我希望它们应该是平等的。
【问题讨论】:
-
试试:
do.call(rbind,Filter(function(x) { length(unique(x[,2])) == 4 },split(df, df$ID))). -
或
df %>% group_by(ID) %>% dplyr::filter(length(unique(time)) == 4) %>% data.frame()和dplyr。 -
@Abdou - 谢谢!第一个代码不起作用。第二个给出与我的 data2 代码相同的结果。我用
time==31少了两行。实际上,所有四个时间点(11、21、31、41)都应该具有相同数量的 ID 或行或对象。使用data2 <- df[df$ID %in% names(table(df$ID))[table(df$ID) > 3],]代码或您的df %>% group_by(ID) %>% dplyr::filter(length(unique(time)) == 4) %>% data.frame()代码,我得到 4695 行或对象或 ID,分别为 11、21,41,而 4693 为 31 次。 -
我提供的两个代码 sn-ps 都做同样的事情,所以我不确定“第一个代码不起作用”是什么意思。看起来您的数据中有 2 行的
time值为32。您没有提到time的值为32的行。 -
我会写一个答案来解释我如何发现有
32的行。
标签: r duplicates unique