[英]R syntax for selecting all but two first rows
如何从例如mtcars数据集中选择除前两行之外的所有行?
我知道我可以写no_mazda <- mtcars[3:32]
,只要我知道行数就行。 但是当我不知道我需要写的行数时,例如no_mazda <- mtcars[3:nrow(mtcars)]
哪个原因也有效,但是:
R是否提供了比包含两次mtcars
的表达式更智能的语法?
负指数意味着“跳过”:
mtcars[-(1:2)]
跳过矢量 mtcars
前2个索引。 如果您需要先跳过10,请使用mtcars[-(1:10)]
。
请注意,您说的是“数据集”,但您使用的代码是矢量,所以我也回答是mtcars
是否为矢量。 如果mtcars
是一个数据mtcars
而您正在选择行,则必须使用尾随逗号:
mtcars[-(1:2),]
我更喜欢使用负值为n
tail
:
tail(mtcars,-2)
如果您碰巧正在使用data.table
(为什么有人不使用它,如果您还在使用data.frame?) - 那么您可以使用方便的.N
运算符( 更多信息 ),其本质上包含表格中的行数。
这是一个有效的例子:
# make sure you have data.table
install.packages("data.table")
library(data.table)
# load the mtcars data
data(mtcars)
# Make a data table out of the mtcars dataset
cars <- as.data.table(mtcars, keep.rownames = TRUE)
# Take all the rows from a given index (e.g. 5) to the end
> cars[5:.N]
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
2: Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
3: Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
4: Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
... (truncated)
只需将5换成2即可获得OP所需的输出。
这当然允许动态使用不同长度的表,而不必总是使用length()
函数。 例如,如果您知道您总是想要占用表的最后5行并删除最后一行 - 获得4行作为输出 - 那么您可以执行以下操作:
> cars[(.N-4):(.N-1)] # note the expressions for slicing must be in parentheses
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
2: Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
3: Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
4: Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
或者只是总是得到最后一行:
cars[.N]
...这与Python的等价物一样简洁明了: cars[-1]
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.