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

我猜您会收到此错误,因为数据框中的每一列/变量都必须具有相同的长度。您可以创建一个更长的新变量并将其与旧数据框连接,但它将重复其他变量中的数据。

> 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 回答
0

Stack 在这里似乎是显而易见的答案,但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

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