6

假设我将一个 csv 文件读入一个名为“d”的数据框中。我希望打印此数据框的最后 2 行。我尝试了以下方法,但它正在打印从 n-1 开始的所有内容。有人可以帮我理解这种行为吗?

> n<-nrow(d)
> n
[1] 153
> subset(d[n:n-1,])
4

4 回答 4

7

你可以只使用尾巴

  tail(d, 2)

将给出最后两行。

于 2013-01-08T06:37:14.367 回答
7

@mnel 是正确的,使用 tail() 可能是最简单的,但是我认为您的困惑与子集()和索引的一般工作方式有关。在您的示例中,请注意您如何索引矩阵和 data.frames,因为

d[(n:n - 1), ]

不一样

d[n:(n-1), ]

因此请仔细检查差异,因为操作顺序很重要。subset() 函数还基于逻辑指标进行索引,并具有以下形式

 subset(object, subset = logicalvector)

其中逻辑向量给出了要提取的行。有关更多详细信息,请参见 ?subset。

于 2013-01-08T07:00:18.187 回答
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
于 2013-01-08T06:35:15.623 回答
2

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

于 2013-01-09T08:16:28.163 回答