具有多个相同名称的'id.vars'的数据帧

问题描述 投票:0回答:1

我有一个包含多个名称相同的列的数据框:

> df <- data.frame(X1=c(1:4),Y1=c(16:13),X2=c(4:7),Y2=c(-1:-4),X3=c(3:6),Y3=c(2:-1))
> df
  X1 Y1 X2 Y2 X3 Y3
1  1 16  4 -1  3  2
2  2 15  5 -2  4  1
3  3 14  6 -3  5  0
4  4 13  7 -4  6 -1

> names(df)[c(1,3,5)] <- "X" 

我想使用id.vars ='X'熔化此数据帧,但是只能识别第一个'X'列。这给了我:

> df2 <- melt(df, id.vars = 'X')
> df2
   X variable value
1  1       Y1    16
2  2       Y1    15
3  3       Y1    14
4  4       Y1    13
5  1       Y2    -1
6  2       Y2    -2
7  3       Y2    -3
8  4       Y2    -4
9  1       Y3     2
10 2       Y3     1
11 3       Y3     0
12 4       Y3    -1

我想要的输出是:

> df2
   X variable value
1  1       Y1    16
2  2       Y1    15
3  3       Y1    14
4  4       Y1    13
5  4       Y2    -1
6  5       Y2    -2
7  6       Y2    -3
8  7       Y2    -4
9  3       Y3     2
10 4       Y3     1
11 5       Y3     0
12 6       Y3    -1
r dataframe melt
1个回答
0
投票

我们可以使用melt中的data.table

library(data.table)
names(df) <- make.unique(names(df))
melt(setDT(df), measure = patterns("^X", "^Y"))
© www.soinside.com 2019 - 2024. All rights reserved.