dataframe [, - 1]和dataframe [-1]是否相同?

时间:2014-01-15 12:25:12

标签: r dataframe

很抱歉,这似乎是一个非常愚蠢的问题,但dataframe[ ,-1]dataframe[-1]相同,是否适用于所有数据类型?

为什么它们是相同的

3 个答案:

答案 0 :(得分:25)

几乎。

[-1]使用data.frame是一个列表的事实,因此当你执行dataframe[-1]时,它会返回另一个没有第一个元素(即列)的data.frame(列表)。

[ ,-1]使用data.frame是二维数组这一事实,因此当您执行dataframe[, -1]时,您将获得不包含第一列的子数组。

先验,它们听起来是一样的,但第二种情况也会默认尝试减少它返回的子阵列的维度。因此,根据dataframe的尺寸,您可能会获得data.frame或vector,例如参见:

> data <- data.frame(a = 1:2, b = 3:4)
> class(data[-1])
[1] "data.frame"
> class(data[, -1])
[1] "integer"

您可以使用drop = FALSE覆盖该行为:

> class(data[, -1, drop = FALSE])
[1] "data.frame"

答案 1 :(得分:3)

dataframe[-1]将以矢量形式处理您的数据,从而返回除了第一个元素[[edit]]之外的所有元素,如前所述,它被证明是一个列,作为data.framelistdataframe[,-1]会以矩阵形式处理您的数据,并返回除第一列以外的所有数据。

答案 2 :(得分:0)

很抱歉,想把它留作评论,但认为它太大了,我发现有趣的是,唯一一个仍然是非整数的是dataframe [1]。

除了Carl的答案之外,似乎数据帧[[1]]也被视为矩阵。 但是数据帧[1]不是......

但它不能被视为一个矩阵,因为dataframe [[1]]和matrix [[1]]的结果是不同的。

D <- as.data.frame(matrix(1:16,4))
D
M <- (matrix(1:16,4))
M
> D[ ,1]        # data frame leaving out first column
[1] 1 2 3 4
> D[[1]]        # first column of dataframe
[1] 1 2 3 4
> D[1]          # First column of dataframe
  V1
1  1
2  2
3  3
4  4
> 
> class(D[ ,1])
[1] "integer"
> class(D[[1]])
[1] "integer"
> class(D[1])
[1] "data.frame"
> 
> M[ ,1]        # matrix leaving out first column
[1] 1 2 3 4
> M[[1]]        # First element of first row & col
[1] 1
> M[1]          # First element of first row & col
[1] 1
> 
> class(M[ ,1])
[1] "integer"
> class(M[[1]])
[1] "integer"
> class(M[1])
[1] "integer"