R 数据帧[,-1]和数据帧[-1]是否相同?

R 数据帧[,-1]和数据帧[-1]是否相同?,r,dataframe,R,Dataframe,抱歉,这似乎是一个非常愚蠢的问题,但是dataframe[,-1]和dataframe[-1]是否相同,它是否适用于所有数据类型 为什么它们是相同的呢?dataframe[-1]将以向量形式处理数据,从而返回除第一个元素[[edit]]之外的所有元素,正如前面所指出的,它原来是一列,作为数据。frame是一个列表dataframe[,-1]将以矩阵形式处理数据,返回除第一列以外的所有数据。 [-1]使用data.frame是一个列表的事实,因此当您执行dataframe[-1]操作时,它会返回另

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


为什么它们是相同的呢?

dataframe[-1]
将以向量形式处理数据,从而返回除第一个元素[[edit]]之外的所有元素,正如前面所指出的,它原来是一列,作为
数据。frame
是一个
列表
dataframe[,-1]
将以矩阵形式处理数据,返回除第一列以外的所有数据。

[-1]
使用data.frame是一个列表的事实,因此当您执行
dataframe[-1]
操作时,它会返回另一个data.frame(list),但不包含第一个元素(即列)

[,-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"

很抱歉,我想把它作为一个注释,但我觉得它太大了,我只是觉得有趣的是,唯一保留非整数的是dataframe[1]

根据卡尔的回答,数据帧[[1]]似乎也被视为矩阵。 但数据帧[1]不是

但不能将其视为矩阵,因为数据帧[[1]]和矩阵[[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"
dd[[1]#数据帧的第一列
[1] 1 2 3 4
>D[1]#数据帧的第一列
V1
1  1
2  2
3  3
4  4
> 
>类别(D[,1])
[1] “整数”
>类别(D[[1]])
[1] “整数”
>类别(D[1])
[1] “数据帧”
> 
>M[,1]#不包括第一列的矩阵
[1] 1 2 3 4
>M[[1]#第一行和列的第一个元素
[1] 1
>M[1]#第一行和列的第一个元素
[1] 1
> 
>类别(M[,1])
[1] “整数”
>类别(M[[1]])
[1] “整数”
>类别(M[1])
[1] “整数”

您需要删除“否”。数据帧是一个向量,但不是一个原子向量。它的第一个元素是第一列。data.frame的每个列表元素都是一列,我不认为他说了什么错话。除了下面的答案外,这个主题在Advanced R:,你的答案也在那里。很抱歉回答不好-我没有想到data.frame。意味着culpa@CarlWitthoft我们都原谅你!:-)我想举一个情节的例子,但我想问问。您使用的绘图是否会受到影响。也就是说,如果您尚未转换回数据帧,则不太可能,但您可以向我们展示如何使用
绘图来确认。也请使用
dim(数据帧)
。谢谢大家@弗洛德尔,我会继续努力解决我的情节问题。Hadley创建tibbles的原因之一是:无论大小,无论哪种情况,结果都是一个tibble。
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"