我想要对空气质量数据进行子集化,以便在 airquality$Ozone
等于 41 时获得 airquality$temp
。
我的代码是
airquality[airquality$Ozone==41, airquality$Temp]
我的数据的str()
是
'data.frame': 153 obs. of 6 variables:
$ Ozone : int 41 36 12 18 NA 28 23 19 8 NA ...
$ Solar.R: int 190 118 149 313 NA NA 299 99 19 194 ...
$ Wind : num 7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
$ Temp : int 67 72 74 62 56 66 65 59 61 69 ...
$ Month : int 5 5 5 5 5 5 5 5 5 5 ...
$ Day : int 1 2 3 4 5 6 7 8 9 10 ...
最佳答案
简短回答:仅使用您要选择的列 character
airquality[airquality$Ozone==41, "Temp"]
长答案:
如果您对 data.frame
进行子集化使用索引( [..., ...]
),您有多种选择。
您可以使用数字子集:您只需提供行/列的索引号作为整数值。例如
airquality[1,3] # extracting the 1st row of the 3rd column
您可以使用逻辑子集(如您在示例中所做的那样):通过使用逻辑比较,您可以识别要包含在输出中的行/列
airquality[airquality$Ozone==41, colnames(airquality) == "Temp"] # double logical subsetting
您可以使用字符子集设置:仅适用于列您可以在
[, ...]
中提供列名称作为字符向量。 。airquality[, c("Temp", "somethingElse")]
如果您只想寻址 onw 列,则可以使用“美元”子集:以下是两个将产生相同输出的示例。唯一的区别在于它是首先按行还是按列进行子集化。请注意,如果您在对向量
airquality$Temp
中的值进行子集化之前已经选择了该列(第二个例子),不要在大括号内设置逗号,因为只剩下一个一维向量。airquality[airquality$Ozone==41, ]$Temp airquality$Temp[airquality$Ozone==41] # both do essentially the same
哪里出了问题
airquality[airquality$Ozone==41, airquality$Temp]
<强>?强>
在这种情况下,您可以按行进行逻辑子集,这绝对没问题。另一方面,按列的子集将是自 airquality$Temp
以来按列的数字子集。将把整数向量解析为列的子集。因此,您最终将处理不存在且包含 NA
的列 67、NA 等。 。因此,R 返回错误 "undefined columns selected"
有关 R 子集的进一步介绍,请查看 https://adv-r.hadley.nz/subsetting.html
关于r - 对空气质量数据进行子集化时选择了未定义的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218183/