【问题标题】:Subset dataframe based on levels基于级别的子集数据框
【发布时间】:2020-07-13 20:14:57
【问题描述】:

我在 R 中有以下数据框。我想根据三个标准对其进行子集化

  1. 如果 x 只有 1 个值,则保留该行
  2. 如果 x 具有相同的 z 值,具有两个不同的 y 值,则保留 y 不存在的行 = 1.3
  3. 如果 x 具有三个 z 值,则保留 y 没有的两行 = 1.3

id	x	y	z
a	1	0.2	100
a	2	1	200
a	2	1.3	200
b	1	0.5	400
b	1	1	500
b	1	1.3	600

解决方案如下所示:

id	x	y	z
a	1	0.2	100
a	2	1	200
b	1	0.5	400
b	1	1	500

任何帮助将不胜感激

【问题讨论】:

    标签: r loops for-loop if-statement nested


    【解决方案1】:

    我们可以根据条件按'id'、'x'和filter分组

    library(dplyr)
    df1 %>% 
       group_by(id, x) %>% 
       filter(n() == 1|(n() > 1 & y != 1.3))
    

    数据

    df1 <- structure(list(id = c("a", "a", "a", "b", "b", "b"), x = c(1L, 
    2L, 2L, 1L, 1L, 1L), y = c(0.2, 1, 1.3, 0.5, 1, 1.3), z = c(100L, 
    200L, 200L, 400L, 500L, 600L)), class = "data.frame", row.names = c(NA, 
    -6L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2014-09-10
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      相关资源
      最近更新 更多