2

以下の例で、の列名が明確に名前が付けられていて、そのように呼び出すことができても、列の名前whyが残っていないように見える理由を誰かが説明できますか?xwhyzz

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"]
4

2 に答える 2

6

ベクトルではなく、実際にデータフレームをWhyに保存しているためです。

> 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 の最初の要素をサブリストとして返します。データフレームは特殊なタイプのリストであるため、このタイプのインデックスを使用して列を取得できます。ただし、単一の括弧を使用するだけで、(対象の要素だけではなく) 対象の要素を含むサブリストを返すように指示されます。

于 2012-09-18T13:20:03.170 に答える
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
于 2012-09-18T13:16:09.247 に答える