【发布时间】:2019-08-14 21:44:58
【问题描述】:
我有一个包含很多列的数据框。例如:
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 列以及满足以下 2 个条件的所有列:
-
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))
【问题讨论】:
-
Filter data.frame rows by a logical condition 的可能重复项;要向重复问题添加附加条件,只需在条件之间添加
&,将每个条件写为data[cond1 & cond2, ] -
对不起,我是这个网站的新手,你的评论是什么意思?我检查了你提到的问题,但那是选择行而不是列。
-
对不起,我匆匆忙忙。从 Shree 的回答中可以看出,选择列可以通过从
data[cond1 & cond2, ]切换到data[, cond1 & cond2]来完成(注意逗号的位置)。基本上,您将data.frames、matrix索引为data[row, column],其中row是您要提取的条件或行号,与列参数类似。查看Hadley's Advanced R 在线图书。尽管它的名字是第一次查看必要的章节,例如subsetting可以让你走得更远,而无需阅读高级内容。