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

R 设置空气质量数据子集时选择的未定义列,r,R,我想对空气质量数据进行子集,以便在airquality$Ozone等于41时获得airquality$temp。 我的代码是 airquality[airquality$Ozone==41, airquality$Temp] str()我的数据是 airquality[airquality$Ozone==41, airquality$Temp] 'data.frame': 153 obs. of 6 variables: $ Ozone : int 41 36 12 18 NA

我想对空气质量数据进行子集,以便在
airquality$Ozone
等于41时获得
airquality$temp
。 我的代码是

airquality[airquality$Ozone==41, airquality$Temp]
str()
我的数据是

airquality[airquality$Ozone==41, airquality$Temp]
'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 ...

对于子集的第二个参数,您需要的是列的名称,而不是列的实际值

airquality[airquality$Ozone==41, airquality$Temp]
i、 e.
空气质量[空气质量$Ozone==41,“温度”]

airquality[airquality$Ozone==41, airquality$Temp]
此外,您的数据中有一些NA,我认为您希望对其进行过滤,因此您可能正在寻找更像:

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

airquality[airquality$Ozone==41&!is.na(airquality$Ozone),“Temp”]
简短回答:仅使用您要选择为
字符的列

airquality[airquality$Ozone==41, airquality$Temp]
airquality[airquality$Ozone==41, "Temp"]
长答案

airquality[airquality$Ozone==41, airquality$Temp]
如果使用索引(
[…,…]
)对
data.frame
进行子集,则有几个选项

airquality[airquality$Ozone==41, airquality$Temp]
  • 您可以使用数字子集:您只需将行/列的索引号作为整数值提供。e、 g

    airquality[airquality$Ozone==41, airquality$Temp]
    
    airquality[1,3] # extracting the 1st row of the 3rd column
    
  • 您可以使用逻辑子集(就像您在示例中所做的那样):通过使用逻辑比较,您可以标识要包含在输出中的行/列

    airquality[airquality$Ozone==41, airquality$Temp]
    
    airquality[airquality$Ozone==41, colnames(airquality) == "Temp"] # double logical subsetting
    
  • 您可以使用字符子集:仅对于列,您可以在
    [,…]
    中提供列的名称作为字符向量

    airquality[airquality$Ozone==41, airquality$Temp]
    
    airquality[, c("Temp", "somethingElse")]
    
  • 如果只想在W列上寻址,可以使用“Dollar”子集:下面是两个示例,它们将产生相同的输出。唯一的区别是它首先是按行还是按列子集。请注意,如果在向量
    airquality$Temp
    (第二个示例)中的值子集设置之前已经选择了列,请勿在大括号中设置逗号,因为只剩下一维向量

    airquality[airquality$Ozone==41, airquality$Temp]
    
    airquality[airquality$Ozone==41, ]$Temp
    airquality$Temp[airquality$Ozone==41] # both do essentially the same
    
  • 你怎么了

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

    airquality[airquality$Ozone==41, airquality$Temp]
    
    在这种情况下,您可以按行逻辑地进行子集,这是绝对正确的。另一方面,按列的子集将是按列的数字子集,因为
    airquality$Temp
    将整数向量解析为列的子集。因此,您将最终处理不存在且包含
    NA
    的列67、NA等。因此,R返回错误
    “undefined columns selected”

    airquality[airquality$Ozone==41, airquality$Temp]
    
    对于R的子集的进一步介绍,请看
    airquality$Temp[which(airquality$Ozone==41)]
    欢迎来到SO。尝试
    airquality[airquality$Ozone==41,“Temp”]
    airquality[airquality$Ozone==41,]$Temp
    或airquality$Temp[airquality$Ozone==41]如果您是R新手,您应该了解R中子集的基本原则。请参考
    airquality[airquality$Ozone==41, airquality$Temp]