R - 如何将一个变量的大小写添加到其他变量(堆栈变量)

时间:2011-03-30 05:29:59

标签: r stack rbind

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)

然后我得到一个错误,我的替换有更多行。我该如何解决这个问题?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 

答案 2 :(得分:1)

您的输出与输入的行数不同,因此尝试将后者转换为前者会导致问题。只需创建一个新的数据框:

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

你也可以使用do.call,并利用数据框是一个列表的事实:

df <- data.frame(x = do.call("c", df))

答案 3 :(得分: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

答案 4 :(得分:0)

Stack似乎是明显的答案,但重塑包中的melt确实以同等的方式工作,并且可以为其他更复杂的情况提供一些灵活性。假设您正在使用名为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

如果您需要将其中一列保留为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