r - 过滤掉优先级递减的条件
问题描述
我无法根据优先级降序的条件选择行。我试过找出解决方案,但就是做不到。这似乎是一个简单的任务,但我就是想不通。
这只是我想做的一个一般例子。
structure(list(type = c(100815L, 100815L, 100815L, 100815L,
100815L, 100815L, 100815L), x = structure(c(1L,
1L, 1L, 2L, 1L, 2L, 2L), .Label = c("No", "Yes"), class = "factor"),
y = c(1.51098844290943, 2.31001922745969, 1.52639281812227,
0, 0, 0, 0), z = c(0, 0, 0, 25, 0, 50, 25)), row.names = c(NA,
-7L), class = c("tbl_df", "tbl", "data.frame"))
group <- group %>%
group_by(type) %>%
filter(sum(x == "Yes" &
y == min(y[x == "Yes"]) &
z == max(z[y == min(y[x == "Yes"])])) == 1)
所以基本上我想从一个大样本中过滤出恰好有一个这种情况的组。即没有关系:
- 当 x =“是”并且
- 鉴于 x = "Yes" 选择具有 x = "Yes" 的最小 y 并且
- 从这个最后的最小组中选择具有最大值的 z。
- 鉴于 x = "Yes" 选择具有 x = "Yes" 的最小 y 并且
基本上也有可能不存在这样的最终值。
这是我经常遇到的问题的简化示例。我有一个更大的数据集,我需要根据多个优先级递减的条件为单元格分配值。我希望能够按顺序堆叠条件。
更新
structure(list(type = c(7345L, 7345L, 7345L, 7345L, 7345L,
7345L, 7345L, 7345L, 7345L, 7345L, 7345L, 7345L, 7345L, 7345L,
7345L, 7345L, 7345L, 7345L, 7345L, 7345L, 7345L, 7345L, 7345L
), x= structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = c("No", "Yes"), class = "factor"), y = c(1.66703903751618,
0, 0.899002060282742, 1.77844476717205, 0.858205995526113, 1.77844476717205,
0.894654725714929, 2.28497216539696, 0, 0.899002060282742, 2.28497216539696,
2.85895315127563, 2.85895315127563, 0, 2.85895315127563, 0.858205995526113,
0.894654725714929, 1.66703903751618, 1.66703903751618, 0, 0,
1.66703903751618, 0.894654725714929), z = c(6.67,
0, 3.33, 6.67, 3.33, 6.67, 2, 6.67, 3.33, 3.33, 2, 3.33, 3.33,
2, 3.33, 6.67, 6.67, 6.67, 2, 6.67, 3.33, 6.67, 2)), row.names = c(NA,
-23L), class = c("tbl_df", "tbl", "data.frame"))
# And the code that I attempted:
test <- test %>%
group_by(type) %>%
arrange(type) %>%
filter(sum(y == min(y) & x == "Yes") == 1) %>%
ungroup()
根据我的理解,这里的小组应该被过滤掉,但事实并非如此。有两个“是”,但另一个有一个较小的 y,应该只有一个规则发生的情况,但过滤器没有选择它。
这只是一个有两个条件的限制版本。基本上我试图给一个 x 分配一个“是”。如果有多个,则平局被 y 打破。如果还有平局,则平局被 z 打破。我希望如此。我只是无法让它工作。
解决方案
我认为这就是你要找的:
df %>% group_by(type) %>% filter(x == "Yes",y == min(y),z == max(z))
# # A tibble: 1 × 4
# # Groups: type [1]
# type x y z
# <int> <fct> <dbl> <dbl>
# 1 100815 Yes 0 50
推荐阅读
- python - OSError:在 Pandas 中的 csv 上从文件初始化失败
- api - 来自上下文 Web 搜索引擎的 Web 搜索 API
- laravel-5 - api laravel 中许多请求的异常“ThrottleRequests”错误
- asp.net - 带有 MS SQL 基础序列化列表的 ASP.net REST 服务为空
- elasticsearch - 使用对象初始值设定项语法构建动态查询
- php - 函数之间的字符串以在 PHP 中获取具有相同开始和结束字符串的多个字符串。并将它们存储在数组变量中
- java - 应用程序运行时出现 Android 应用程序错误
- nginx - nginx通配符子域到不同的根
- html - 将 hml 代码中的每个数字增加整数 X
- c - 初始化并打印 const char 指针