2012-09-18 90 views
2

有人可以解釋爲什麼在下面的例子中,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"] 

回答

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

好的答案。或者,'df [[1]] * df [[2]]'應該可以工作。 –

+0

我不會忘記我的'[,]' –

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 
相關問題