【发布时间】:2016-11-24 23:43:50
【问题描述】:
如何按特定值过滤数据集,该值可能出现在数据框中的任何位置,不一定在任何一列或一行下?
假设我有一个这样的数据框。
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 的所有行和列,而不管它在数据框内的哪个位置出现。
最终的输出是
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
欢迎任何提示或建议。提前致谢。
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")
【问题讨论】:
-
一般来说,你可以考虑将你的数据结构从宽格式改成长格式。第 4 到 7 列似乎包含所有相同类型的数据(成绩?百分比?),而列标题看起来像属性(测试名称?)。宽格式通常是您在 Excel 电子表格中收集数据时得到的,但长格式通常更便于在 R 中进行数据操作或聚合。