r - 如何根据两个条件选择列?
问题描述
我有一个包含很多列的数据框。例如:
sample treatment col5 col6 col7
1 a 3 0 5
2 a 1 0 3
3 a 0 0 2
4 b 0 1 1
我想选择sample
和treatment
列以及满足以下两个条件的所有列:
- 它们在
treatment == 'b'
0行中的值 - 它们的值至少来自不
treatment == 'a'
为0 的一行。
预期结果应如下所示:
sample treatment col5
1 a 3
2 a 1
3 a 0
4 b 0
示例数据框:
structure(list(sample = 1:4, treatment = structure(c(1L, 1L,
1L, 2L), .Label = c("a", "b"), class = "factor"), col5 = c(3,
1, 0, 0), col6 = c(0, 0, 0, 1), col7 = c(5, 3, 2, 1)), class = "data.frame", row.names = c(NA,
-4L))
解决方案
这是base R中的一种方法-
cs_a <- colSums(df[df$treatment == "a",-c(1:2)]) > 0
cs_b <- colSums(df[df$treatment == "b",-c(1:2)]) == 0
df[, c(TRUE, TRUE, cs_a & cs_b)]
sample treatment col5
1 1 a 3
2 2 a 1
3 3 a 0
4 4 b 0
与dplyr
-
df %>%
select_at(which(c(TRUE, TRUE, cs_a & cs_b)))
推荐阅读
- python - Tkinter:向画布添加滚动条
- c# - AOP Logging 理解
- python - 合并两个元组字典
- python - 每个 bin 中数据的“标签分数”的 2D 直方图颜色
- rdlc - 两个数字相除时的 RDLC 表达式错误
- azure-webjobs - 天蓝色的连续网络作业正在运行,但有时它意外停止/重新启动
- api-platform.com - 将 API 平台更新到 v2.3.5 后,SwaggerDecorator 无法正常工作
- excel - Excel VBS 中 ActiveSheet.Range.Value 的简单 =IF 语句触发 1004 运行时错误
- subdomain - 在主域更改时自动更新子域网站代码
- reactjs - React-Router - 路由更改时的路由重新渲染组件