【问题标题】:R syntax for selecting all but two first rows用于选择除两个第一行之外的所有行的 R 语法
【发布时间】:2012-04-17 10:13:30
【问题描述】:

我如何选择除前两行之外的所有行,例如mtcars 数据集?

我知道我可以写no_mazda <- mtcars[3:32],只要我知道行数,它就可以工作。但是当我不知道我需要写的行数时,例如no_mazda <- mtcars[3:nrow(mtcars)] 哪个原因也有效,但是:

R 是否提供比包含两次 mtcars 的表达式更智能的语法?

【问题讨论】:

标签: r syntax row


【解决方案1】:

负指数表示“跳过”:

mtcars[-(1:2)]

跳过 vector mtcars 的前 2 个索引。如果您需要跳过前 10 个,只需使用 mtcars[-(1:10)]

请注意,您说的是“数据集”,但您使用的代码是针对向量的,所以我还回答说 mtcars 是否是向量。如果mtcars 是一个数据框并且您正在选择行,则必须使用尾随逗号:

mtcars[-(1:2),]

【讨论】:

  • 我在考虑数据框,但我的手指写了“数据集”。 mtcars 是一个数据框。谢谢。
【解决方案2】:

我更喜欢将tailn 的负值一起使用:

tail(mtcars,-2)

【讨论】:

  • 是的,这是类比 UNIX 的 head -n -2,我也喜欢 :) +1
  • 这个答案更容易编码和解释。应该选择它作为答案。
【解决方案3】:

如果您碰巧使用data.table(如果您使用的是data.frame,为什么没有人使用它?) - 那么您可以使用方便的.N 运算符(more info),它本质上包含表中的行数。

这是一个工作示例:

# 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])

【讨论】:

  • 哇。我从来不知道。
猜你喜欢
  • 2011-04-30
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多