子集空气质量数据时选择了未定义的列

时间:2018-09-07 08:12:30

标签: r

我想对空气质量数据进行子集处理,以便在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 ...

2 个答案:

答案 0 :(得分:2)

简短答案:仅使用您要选择为character的列

airquality[airquality$Ozone==41, "Temp"]

详细答案

如果使用索引(data.frame来对[..., ...]进行子集设置,则有几种选择。

  1. 您可以使用数字子设置:您只需提供行/列的索引号作为整数值即可。例如

    airquality[1,3] # extracting the 1st row of the 3rd column
    
  2. 您可以使用逻辑子设置(如您在示例中所做的那样):通过使用逻辑比较,您可以识别要包含在输出中的行/列

    airquality[airquality$Ozone==41, colnames(airquality) == "Temp"] # double logical subsetting
    
  3. 您可以使用字符子设置:仅用于列,您可以在[, ...]中提供列名称作为字符向量。

    airquality[, c("Temp", "somethingElse")]
    
  4. 如果只想处理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"]