【问题标题】:Create subset data frame with matching names of a smaller vector subset in R在 R 中创建具有匹配名称的较小向量子集的子集数据框
【发布时间】:2021-09-06 00:19:05
【问题描述】:

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

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

Name 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 值。 意思是,我想要一个子数据框,如果同一 IDx 之一的 V2 > 0,则 V1 的所有唯一值都在其中。

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

Name 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 更好的开始方式?

【问题讨论】:

标签: r


【解决方案1】:

你可以使用%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))   

【讨论】:

    【解决方案2】:

    你可以的

    your_data |>
      split(~ V1) |>
      rlist::list.filter(any(V2 > 0)) |>
      dplyr::bind_rows()
    

    返回

    # A tibble: 7 x 3
      Name  V1       V2
      <chr> <chr> <int>
    1 AR2.1 ID2       0
    2 AR2.2 ID2       1
    3 AR3.1 ID3       0
    4 AR3.2 ID3       1
    5 AR3.3 ID3       0
    6 AR4.1 ID4       2
    7 AR4.2 ID4       0
    

    (使用的数据:)

    your_data <- structure(list(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(0L, 0L, 0L, 1L, 0L, 1L, 0L, 2L, 0L)), row.names = c(NA, -9L), class = c("tbl_df", "tbl", "data.frame"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-10
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-15
      • 2017-01-22
      • 1970-01-01
      • 2014-05-14
      相关资源
      最近更新 更多