如何将任何数据帧重新整形为2列数据帧,第一个中的(重复)列名称和第二个中的相应值?

时间:2017-10-31 15:52:32

标签: r

如何重塑这样的数据框架:

x1  x2  x3  x4
1   1   5   6
1   2   3   5
2   1   6   1
2   2   2   4

为:

x1  1   
x1  1
x1  2
x1  2
x2  1
.
.
.

我看了很多帖子(比如this one),但我无法弄明白。

2 个答案:

答案 0 :(得分:2)

使用stack

stack(df)
   values ind
1       1  x1
2       1  x1
3       2  x1
4       2  x1
5       1  x2
6       2  x2
7       1  x2
8       2  x2
9       5  x3
10      3  x3
11      6  x3
12      2  x3
13      6  x4
14      5  x4
15      1  x4
16      4  x4

对于情节

df$ind=as.character(df$ind)
boxplot(values~ind,data=df)

答案 1 :(得分:1)

假设您还拥有ID列,使用melt()命令可能是最佳解决方案。请查看此link以获取进一步说明。

newdf <- reshape2::melt(df, id="id").

如果您还没有ID,则可以将rownames设为ID列,然后再将其删除。

df$id <- rownames(df)
newdf <- melt(df, id="id").
newdf$id <- NULL

另外,在评论中提出更多问题但在控制台中运行?boxplot()这是一个不好的形式,它应该相当简单。