1
var1 var2 var3
   1    2    3
   1    2    3
   1    2    3

取得するために、var1 の下に var2 と var3 をスタックします。

var1
   1
   1
   1
   2
   2
   2
   3
   3
   3

私は試した:

data$var <- append(data$var1,data$var2)

次に、置換にさらに行があるというエラーが表示されます。これを解決するにはどうすればよいですか?

4

5 に答える 5

4
df <- data.frame(var1=1:3,var2=4:6,var3=7:9)
df2 <- stack(df)
print(df2)

  values  ind
1      1 var1
2      2 var1
3      3 var1
4      4 var2
5      5 var2
6      6 var2
7      7 var3
8      8 var3
9      9 var3
于 2011-03-30T06:58:11.230 に答える
2

あなたは試してみたいかもしれませんunlist

dtf <- data.frame(a = 1:3, b = 1:3, c = 1:3)
unlist(dtf)
a1 a2 a3 b1 b2 b3 c1 c2 c3 
 1  2  3  1  2  3  1  2  3 
于 2011-03-30T08:20:30.740 に答える
1

出力の行数は入力の行数と異なるため、後者を前者に変換しようとすると問題が発生します。新しいデータ フレームを作成するだけです。

df <- data.frame(x = c(df$var1, df$var2, df$var3)

do.callまた、データ フレームがフードの下のリストであるという事実を利用して、 に夢中になることもできます。

df <- data.frame(x = do.call("c", df))
于 2011-03-30T06:52:45.017 に答える
0

ここではスタックが明白な答えのように見えますがmelt、reshape パッケージでは同等の方法で機能し、他のより複雑な状況に対してある程度の柔軟性を提供する場合があります。dat という名前のオブジェクトを操作しているとします。

library(reshape)
melt(dat)

  variable value
1     var1     1
2     var1     1
3     var1     1
4     var2     2
5     var2     2
6     var2     2
7     var3     3
8     var3     3
9     var3     3

列の 1 つを ID 変数として保持する必要がある場合:

> melt(dat, id.vars = "var1")
  var1 variable value
1    1     var2     2
2    1     var2     2
3    1     var2     2
4    1     var3     3
5    1     var3     3
6    1     var3     3
于 2011-03-30T12:17:27.737 に答える
0

データフレームの各列/変数は同じ長さである必要があるため、このエラーが発生していると思います。新しい長い変数を作成して古いデータフレームと結合することはできますが、他の変数でデータを繰り返すことになります。

> df <- data.frame(var1=1:3,var2=4:6,var3=7:9)
> df
  var1 var2 var3
1    1    4    7
2    2    5    8
3    3    6    9

# join combination of var1/var2 and 'df' dataframe

> data.frame(newvar=c(df$var1,df$var2),df)
  newvar var1 var2 var3
1      1    1    4    7
2      2    2    5    8
3      3    3    6    9
4      4    1    4    7
5      5    2    5    8
6      6    3    6    9
于 2011-03-30T06:11:57.977 に答える