有人可以解释为什么在下面的示例中,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"]
答案 0 :(得分: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
df[1]
返回df的第一个元素作为子列表。数据框是一种特殊类型的列表,这就是您可以使用此类索引来获取列的原因。但是,只使用单个括号使其返回包含感兴趣元素的子列表(而不仅仅是感兴趣的元素)。
答案 1 :(得分:1)
可能是你的问题是索引,试试这个:
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