【问题标题】:naming dataframe column vectors using `$`使用`$`命名数据框列向量
【发布时间】:2012-09-18 13:11:39
【问题描述】:

有人可以解释为什么在下面的示例中,why 的列名似乎仍然是 x,即使它被明确命名为 why 并且可以这样调用,但不能为列 zz 调用?

df<-data.frame(x=1:5,y=1:5)
df$z<-"a"
df$zz<-df$x*df$y
df$why<-df[1]*df[2]

df

df["why"]

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    因为您实际上是在将数据框存储到为什么 - 而不是向量中。

    > str(df)
    'data.frame':   5 obs. of  4 variables:
     $ x  : int  1 2 3 4 5
     $ y  : int  1 2 3 4 5
     $ z  : chr  "a" "a" "a" "a" ...
     $ why:'data.frame':    5 obs. of  1 variable:
      ..$ x: int  1 4 9 16 25
    > str(df[1]*df[2])
    'data.frame':   5 obs. of  1 variable:
     $ x: int  1 4 9 16 25
    > str(df[,1] * df[,2])
     int [1:5] 1 4 9 16 25  
    > df$why2 <- df[,1]*df[,2]
    > df
      x y z  x why2
    1 1 1 a  1    1
    2 2 2 a  4    4
    3 3 3 a  9    9
    4 4 4 a 16   16
    5 5 5 a 25   25
    

    df[1] 将 df 的第一个元素作为子列表返回。数据框是一种特殊类型的列表,这就是为什么您可以使用这种类型的索引来抓取列的原因。然而,仅使用单括号告诉它返回一个包含感兴趣元素的子列表(而不仅仅是感兴趣的元素)。

    【讨论】:

    • 我不会再忘记我的[,]
    【解决方案2】:

    可能是你的问题是索引,试试这个:

    df$zz<-df$x*df$y       # this should replace df$zz<-x*y
    df$why<-df[,1]*df[,2]  # this repaces df$why<-df[1]*df[2]
    
    df
      x y z zz why
    1 1 1 a  1   1
    2 2 2 a  4   4
    3 3 3 a  9   9
    4 4 4 a 16  16
    5 5 5 a 25  25
    
    df["why"]
      why
    1   1
    2   4
    3   9
    4  16
    5  25
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-16
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      相关资源
      最近更新 更多