我的字符向量包含数值。我想根据向量对数据进行子集化。
x = '1,2,3,4,5'
n = noquote(gsub(","," ",x))
mtcars[n,]
它不起作用。
但是以下代码有效。
d = data.frame(n = 1:5)
mtcars[d$n,]
答案 0 :(得分:0)
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