我想对空气质量数据进行子集处理,以便在airquality$temp
等于41时得到airquality$Ozone
。
我的代码是
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 ...
答案 0 :(得分:2)
简短答案:仅使用您要选择为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
会将整数向量解析为列的子集。因此,您将最终处理不存在的列67和NA等,它们包含NA
。因此,R返回错误"undefined columns selected"
要进一步了解R的子集,请查看 https://adv-r.hadley.nz/subsetting.html
答案 1 :(得分:0)
您想要列的名称,而不是您的子集第二个参数的列的实际值。
即airquality[airquality$Ozone==41, "Temp"]
此外,您的数据中还包含一些NA,我想您希望对其进行过滤,因此您可能正在寻找更类似的东西:
airquality[airquality$Ozone==41 & !is.na(airquality$Ozone), "Temp"]