R 如何仅选择两个数据集中存在的案例? 问题导论
我有一个由两个数据集组成的数据集。一个包含基线数据(t1),另一个包含随访数据(t2)。不是基线数据中的所有病例都出现在随访数据中,也不是随访数据中的所有病例都出现在基线数据中 目标 我只想选择两个数据集中都存在的情况。 为此,我合并了两个数据集 数据示例 因此,在我的示例(上面)中,我希望案例1、4和7用于后续分析 我试过的R 如何仅选择两个数据集中存在的案例? 问题导论,r,R,我有一个由两个数据集组成的数据集。一个包含基线数据(t1),另一个包含随访数据(t2)。不是基线数据中的所有病例都出现在随访数据中,也不是随访数据中的所有病例都出现在基线数据中 目标 我只想选择两个数据集中都存在的情况。 为此,我合并了两个数据集 数据示例 因此,在我的示例(上面)中,我希望案例1、4和7用于后续分析 我试过的 我尝试使用unique()和duplicated(),但到目前为止,我还没有找到有效的解决方案。我们可以使用data.table。我们将'data.frame'转换为'd
我尝试使用unique()和duplicated(),但到目前为止,我还没有找到有效的解决方案。我们可以使用
data.table
。我们将'data.frame'转换为'data.table'(setDT(df1)
,按'ID'分组,如果'Tn'的unique
计数等于2,我们对data.table(.SD
)进行子集化
或使用base R
df1[df1$ID %in% names(which(rowSums(table(df1[1:2]))==2)) ,]
数据
df1我们可以使用data.table
。我们将'data.frame'转换为'data.table'(setDT(df1)
,按'ID'分组,如果'Tn'的unique
计数等于2,我们对data.table进行子集(.SD
)
或使用base R
df1[df1$ID %in% names(which(rowSums(table(df1[1:2]))==2)) ,]
数据
df1您还可以使用基本R
rbind(merge(merge(subset(subset(df1,Tn == 't1'),select=c(ID)),subset(subset(df1,Tn == 't2'),select=c(ID)),by="ID"),subset(subset(df1,Tn == 't1'),by='ID')),merge(merge(subset(subset(df1,Tn == 't1'),select=c(ID)),subset(subset(df1,Tn == 't2'),select=c(ID)),by="ID"),subset(subset(df1,Tn == 't2'),by='ID')))
另一个更优雅的方法是
subset(df1,(ID %in% subset(df1,select=c(ID), Tn == 't1')$ID) & (ID %in% subset(df1,select=c(ID), Tn == 't2')$ID))
您也可以使用基本R
rbind(merge(merge(subset(subset(df1,Tn == 't1'),select=c(ID)),subset(subset(df1,Tn == 't2'),select=c(ID)),by="ID"),subset(subset(df1,Tn == 't1'),by='ID')),merge(merge(subset(subset(df1,Tn == 't1'),select=c(ID)),subset(subset(df1,Tn == 't2'),select=c(ID)),by="ID"),subset(subset(df1,Tn == 't2'),by='ID')))
另一个更优雅的方法是
subset(df1,(ID %in% subset(df1,select=c(ID), Tn == 't1')$ID) & (ID %in% subset(df1,select=c(ID), Tn == 't2')$ID))
将t1
和t2
作为单独的数据帧,并使用内部联接。@zx8754可以使用merge
解决,但输入组合数据集不需要这样做。@akrun在目标部分OP中说,他需要内部联接。为此,我组合了数据。他不应该组合,那么它是上述合并后的100%副本@zx8754在这种情况下,它将是一个重复。将t1
和t2
作为单独的数据帧,并使用内部联接。@zx8754可以使用merge
解决,但输入组合数据集不需要它。@akrun在Aim部分OP中说,他需要内部联接,为此目的我组合了数据。他不应该组合,然后它是上述合并帖子的100%复制。@zx8754在这种情况下,它将是一个复制。根据OP帖子中的描述,虽然它给出了输出,但我认为这是不正确的。@akrun我没有理解你。这在任何特定情况下都会失败吗?尽管OP帖子中给出了输出,但我认为这是不正确的。@ak运行我没有得到你。这在任何特定情况下都会失败吗?子集替代方案运行得非常好。谢谢!子集替代方案运行得非常好。谢谢!
df1[which(df1$ID %in% df1[duplicated(df1$ID), ]$ID), ]
#ID Tn Score1 Score2
#1 1 t1 1 1
#2 1 t2 1 3
#5 4 t1 3 2
#6 4 t2 1 1
#9 7 t1 5 1
#10 7 t2 4 5