【问题标题】:what is the difference between df[1] and df[,1] (in dataframes)df[1] 和 df[,1] 有什么区别(在数据帧中)
【发布时间】:2020-08-13 16:36:43
【问题描述】:

我注意到它们给出了相同的结果,除了 df[1] 它以数据框的形式给出列,而 df[,1] 返回一个向量。另外,我注意到它们给出的结果完全相同导致小问题。这就是它的全部吗?

【问题讨论】:

  • 请参阅help(Extract),了解[ 因每种对象类型而异的所有有趣方式。还有[[$ 需要考虑。
  • df[,1, drop=FALSE]df[1] 相同(它们都给出了一个data.frame)而df[,1]df[[1]] 相同(如果列不是列表,它们都给出一个原子向量柱子)。 tibble 给出了相同的结果,因为 tibble 使用 drop=FALSE 作为默认值。

标签: r dataframe indexing


【解决方案1】:

“[”函数有(至少)两种不同的形式。当用于具有两个参数的列表的特殊形式的数据框时,它返回指定列的行和列的内容。它确实有一个可选参数“drop”,其默认值为 TRUE。如果它设置为 FALSE,那么您将子集作为数据帧与一个参数一起使用时,它会返回列本身,而不会丢失“data.frame”类属性。这些列实际上是它们自己的列表。

另一个提取函数,“[[”也只返回内容。

dat <- data.frame(A=1:10,B=letters[1:10])

> str(dat[1:5,])
'data.frame':   5 obs. of  2 variables:
 $ A: int  1 2 3 4 5
 $ B: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5
> str(dat[1:5,1])
 int [1:5] 1 2 3 4 5
> str(dat[1])
'data.frame':   10 obs. of  1 variable:
 $ A: int  1 2 3 4 5 6 7 8 9 10
> str(dat[[1]])
 int [1:10] 1 2 3 4 5 6 7 8 9 10
> str(dat[,1,drop=FALSE])
'data.frame':   10 obs. of  1 variable:
 $ A: int  1 2 3 4 5 6 7 8 9 10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 2020-05-26
    • 2012-06-08
    • 2022-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多