通过其条目过滤数据帧 [英] Filter a dataframe by its entry
问题描述
如何通过数据框中任何位置可能发生的特定值过滤数据集,但不一定在任何一列或第一行?
How do I filter a dataset by a specific value that can occur anywhere in the data frame and not necessarily under any one column or row ?
假设我有一个数据框是这样的。
Suppose I have a data frame that is like this.
id gender group Student_Math_1 Student_Math_2 Student_Read_1 Student_Read_2
46 M Red 23 45 37 56
46 M Red 34 36 33 78
46 M Red 56 63 58 NA
62 F Blue 59 NA NA 68
62 F Blue NA 68 87 73
38 M Red 78 57 NA 65
38 M Red NA 75 54 NA
17 F Blue 74 NA 56 72
17 F Blue 75 61 NA 79
17 F Blue NA 74 43 81
我正在尝试以对数据框进行子集,使得我保留包含值 68
的所有行和列,而不管数据帧内发生的位置。
And I am trying to subset this data frame such that I retain all the rows and columns that contain the value 68
regardless of where it occurs within the data frame.
最终输出将是
id gender group Student_Math_1 Student_Math_2 Student_Read_1 Student_Read_2
62 F Blue 59 NA NA 68
62 F Blue NA 68 87 73
欢迎任何提示或建议。感谢提前。
Any tips or suggestions are welcome. Thanks in advance.
df = structure(list(id = c(46, 46, 46, 62, 62, 38, 38, 17, 17, 17),
gender = structure(c(2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L,
1L), .Label = c("F", "M"), class = "factor"), group = structure(c(2L,
2L, 2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L), .Label = c("Blue", "Red"
), class = "factor"), Student_Math_1 = c(23, 34, 56, 59,
NA, 78, NA, 74, 75, NA), Student_Math_2 = c(45, 36, 63, NA,
68, 57, 75, NA, 61, 74), Student_Read_1 = c(37, 33, 58, NA,
87, NA, 54, 56, NA, 43), Student_Read_2 = c(56, 78, NA, 68,
73, 65, NA, 72, 79, 81)), .Names = c("id", "gender", "group",
"Student_Math_1", "Student_Math_2", "Student_Read_1", "Student_Read_2"
), row.names = c(NA, -10L), class = "data.frame")
推荐答案
或者,
df[unique(which(df==68, arr.ind = T)[,1]),]
# id gender group Student_Math_1 Student_Math_2 Student_Read_1 Student_Read_2
#5 62 F Blue NA 68 87 73
#4 62 F Blue 59 NA NA 68
在这种情况下,您不需要关心列的位置,或者出现 NA
的位置。 唯一
用于每一次出现68次以上的情况。
In this case, you don't need to care about the position of the columns or where NA
s are appeared. unique
is used in case 68 is appeared more than once per row.
这篇关于通过其条目过滤数据帧的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!