【问题标题】:Convert a dataframe with 1 variable to a vector将具有 1 个变量的数据帧转换为向量
【发布时间】:2012-07-29 07:18:56
【问题描述】:

以下代码对数据框进行子集化,但在子集中包含行名:

mpg = subset(mtcars, cyl=='6', select=mpg)

如何将生成的 mpg 对象转换为仅包含值的向量?换句话说,我需要从生成的 mpg 对象中删除行名

【问题讨论】:

    标签: r vector subset


    【解决方案1】:

    你有很多选择。

    首先,由于您使用的是subset,您可以指定参数drop=TRUE,但请参阅此答案后面的警告):

    subset(mtcars, cyl=='6', select=mpg, drop=TRUE)
    [1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
    

    但从长远来看,您应该熟悉 R 子集运算符 [[[$

    mtcars[mtcars$cyl==6, "mpg"]
    [1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
    

    您可以使用函数with 简化最后一行代码(但请再次查看警告):

    with(mtcars, mtcars[cyl==6, "mpg"])
    [1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
    

    警告:subsetwith 的某些方面可能被认为是有害的。首先在数据框的上下文中评估所有对象。因此,如果您碰巧使用了与数据框中的列同名的变量,您的表达式将计算为列名,而不是您的变量:

    with(mtcars,mtcars[cyl==6,"mpg"])
    [1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
    
    gear <- 6
    with(mtcars,mtcars[cyl==gear,"mpg"])
    [1] 22.8 24.4 22.8 32.4 30.4 33.9 27.3 21.4
    
    subset(mtcars, cyl==gear, select=mpg, drop=TRUE)
    [1] 22.8 24.4 22.8 32.4 30.4 33.9 27.3 21.4
    

    withsubset 调用已从数据框中获取 gear,而不是从您将其设置为 6 的位置。

    【讨论】:

      猜你喜欢
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-11
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      相关资源
      最近更新 更多