Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何仅选择两个数据集中存在的案例? 问题导论_R - Fatal编程技术网

R 如何仅选择两个数据集中存在的案例? 问题导论

R 如何仅选择两个数据集中存在的案例? 问题导论,r,R,我有一个由两个数据集组成的数据集。一个包含基线数据(t1),另一个包含随访数据(t2)。不是基线数据中的所有病例都出现在随访数据中,也不是随访数据中的所有病例都出现在基线数据中 目标 我只想选择两个数据集中都存在的情况。 为此,我合并了两个数据集 数据示例 因此,在我的示例(上面)中,我希望案例1、4和7用于后续分析 我试过的 我尝试使用unique()和duplicated(),但到目前为止,我还没有找到有效的解决方案。我们可以使用data.table。我们将'data.frame'转换为'd

我有一个由两个数据集组成的数据集。一个包含基线数据(t1),另一个包含随访数据(t2)。不是基线数据中的所有病例都出现在随访数据中,也不是随访数据中的所有病例都出现在基线数据中

目标 我只想选择两个数据集中都存在的情况。 为此,我合并了两个数据集

数据示例 因此,在我的示例(上面)中,我希望案例1、4和7用于后续分析

我试过的
我尝试使用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