很抱歉,这似乎是一个非常愚蠢的问题,但dataframe[ ,-1]
和dataframe[-1]
相同,是否适用于所有数据类型?
为什么它们是相同的
答案 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.frame
是list
。 dataframe[,-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"