使用`$`命名数据帧列向量

use*_*1_G 2 r dataframe

有人可以解释为什么在下面的示例中,列名称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"]
Run Code Online (Sandbox Code Playgroud)

Das*_*son 6

因为你实际上是在存储数据帧的原因 - 而不是矢量.

> 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
Run Code Online (Sandbox Code Playgroud)

df[1]返回df的第一个元素作为子列表.数据框是一种特殊类型的列表,这就是您可以使用此类索引来获取列的原因.但是,仅使用单个括号使其返回包含感兴趣元素的子列表(而不仅仅是感兴趣的元素).