在R中提取数据框的子集

6
假设我将一个csv文件读入到名为“d”的数据框中。我想打印出这个数据框的最后两行。我尝试了下面的代码,但它打印出了从n-1开始的所有内容。请问有人能帮我理解这种行为吗?
> n<-nrow(d)
> n
[1] 153
> subset(d[n:n-1,])
4个回答

7
你可以直接使用tail命令。
  tail(d, 2)

会给出最后两行。

7

@mnel是正确的,使用tail()可能是最简单的方法,但我认为你的困惑与subset()和索引的工作原理有关。在你的例子中要注意如何索引矩阵和数据框。

d[(n:n - 1), ]

不同于

d[n:(n-1), ]

请仔细检查差异,因为操作顺序很重要。 subset()函数还基于逻辑指示器进行索引,其形式为

 subset(object, subset = logicalvector)

逻辑向量用于指定要提取的行。有关更多详细信息,请参见?subset。


3

这对我来说很有效...

d <- matrix(1:10,nrow=5)
d
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

d <- as.data.frame(d)
d
  V1 V2
1  1  6
2  2  7
3  3  8
4  4  9
5  5 10

n <- nrow(d)
> n
[1] 5
d[n:(n-1),] ## Specifying the number of the row inside the brackets.
 V1 V2
5  5 10
4  4  9

d[n:n-1,] ## without brackets it will do 5:5 -1 = 4, so printing only the fourth row
  V1 V2
4  4  9

不需要在这里使用子集。你正在使用[. - mnel

2
我会使用: tail(d,2)d[(n-1):n, ] 希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接