使用 R 中较小向量子集的匹配名称创建子集数据框

索菲亚

我有一个大数据框,我想在其中对数据进行子集化。

我做了一个示例表:名称是一个唯一的 ID,V1 总结了所有点 ARx,V2 是我想用它来构建一个子集的值。我想总结所有 IDx (V1),如果一个 V2 > 0。在我的示例表中,我会选择 for selection <- df$V1[which(df$V2>0),],这显然会给我所有 V1 ID 的向量,其中 V2 > 0。

姓名 V1 V2
AR1.1 ID1 0
AR1.2 ID1 0
AR2.1 ID2 0
AR2.2 ID2 1
AR3.1 ID3 0
AR3.2 ID3 1
AR3.3 ID3 0
AR4.1 ID4 2
AR4.2 ID4 0

现在我的问题来了:我想将 V1 ID 传输到整个数据框,从选择中的选定 ID 中选择所有行,而不管 V2 值如何。意思是,我想要一个子数据框,其中 V1 的所有唯一值都在其中,如果相同 IDx 之一的 V2 > 0。

在我的示例表中,这将是:

姓名 V1 V2
AR2.1 ID2 0
AR2.2 ID2 1
AR3.1 ID3 0
AR3.2 ID3 1
AR3.3 ID3 0
AR4.1 ID4 2
AR4.2 ID4 0

如何将我的选择向量传输到整个数据框(可能具有匹配的 IDx 名称?)。which再次尝试使用%in%,但我只创建了一个较小的子集并且无法传输所有 V2=0 V1。有没有更好的方式开始而不是开始which

基基

您可以使用%in%

selection <- df$V1[df$V2>0]
#selection <- df$V1[which(df$V2>0)] #Alternative
#selection <- unique(selection)     #Optional
df[df$V1 %in% selection,]
#   Name  V1 V2
#3 AR2.1 ID2  0
#4 AR2.2 ID2  1
#5 AR3.1 ID3  0
#6 AR3.2 ID3  1
#7 AR3.3 ID3  0
#8 AR4.1 ID4  2
#9 AR4.2 ID4  0

数据:

df <- data.frame(Name = c("AR1.1", "AR1.2", "AR2.1", "AR2.2", "AR3.1", "AR3.2", "AR3.3", "AR4.1", "AR4.2")
 , V1 = c("ID1", "ID1", "ID2", "ID2", "ID3", "ID3", "ID3", "ID4", "ID4")
 , V2 = c(0, 0, 0, 1, 0, 1, 0, 2, 0))   

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章