【问题标题】:Are dataframe[ ,-1] and dataframe[-1] the same?dataframe[ ,-1] 和 dataframe[-1] 一样吗?
【发布时间】:2014-02-03 22:04:31
【问题描述】:

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

为什么它们是一样的

【问题讨论】:

  • 除了下面的答案之外,Advanced R:adv-r.had.co.nz/Subsetting.html 中也涵盖了这个主题,您的答案也在那里。
  • 抱歉,回复不好 - 我没想到 data.frame。过失
  • @CarlWitthoft 我们都原谅你了! :-)

标签: r dataframe


【解决方案1】:

抱歉,想留下这个作为评论,但认为它太大了,我只是觉得有趣的是,唯一保持非整数的是 dataframe[1]。

对于 Carl 的回答,似乎 dataframe[[1]] 也被视为矩阵。 但是 dataframe[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"

【讨论】:

    【解决方案2】:

    差不多了。

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

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

    先验,它们听起来很像,但第二种情况也默认尝试减少它返回的子数组的维度。因此,根据您的dataframe 的尺寸,您可能会得到一个 data.frame 或一个向量,例如:

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

    【讨论】:

    • 我试图举一个情节的例子,但我只是问问。您使用的情节是否会受到影响。即,如果您还没有转换回数据框
    • 不太可能,但您可以向我们展示您如何使用plot 进行确认。也给使用dim(dataframe)
    • 谢谢大家。 @flodel,我将继续尝试解决我的情节问题。如果我不能让它工作,会再次发布。
    • Hadley 创建 tibble 的原因之一:无论尺寸如何,无论哪种情况,结果都是一个 tibble。
    【解决方案3】:

    dataframe[-1] 将以向量形式处理您的数据,因此返回除第一个元素 [[edit]] 之外的所有元素,正如已经指出的那样,结果是一列,因为 data.frame 是 @987654323 @。 dataframe[,-1] 将以矩阵形式处理您的数据,返回除第一列之外的所有数据。

    【讨论】:

    • 你需要去掉“No”。 dataframe 是一个向量,但不是原子向量。它的第一个元素是第一列。
    • data.frame的每个list元素都是一列,我觉得他说的没有错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2019-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多