【问题标题】:Subset data based on character vector基于特征向量的子集数据
【发布时间】:2018-10-16 14:34:17
【问题描述】:

我有包含数值的字符向量。我想根据向量对数据进行子集化。

x = '1,2,3,4,5'
n = noquote(gsub(","," ",x))
mtcars[n,]

它不工作。

但下面的代码有效。

d = data.frame(n = 1:5)
mtcars[d$n,]

【问题讨论】:

    标签: r


    【解决方案1】:

    x 是一个字符串而不是一个数字向量,可将其用作行索引。我们可以在“,”上拆分字符串,将数字转换为数字,然后对数据框进行子集化。

    mtcars[as.numeric(strsplit(x, ",")[[1]]), ]
    
    #                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
    #Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
    #Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
    #Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
    #Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
    #Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
    

    出于比较目的,请查看以下输出以了解为什么您的第二次尝试有效。

    class(d$n)
    #[1] "integer"
    length(d$n)
    #[1] 5
    
    class(x)
    #[1] "character"
    length(x)
    #[1] 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 2013-02-20
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      相关资源
      最近更新 更多