我有一个包含多个名称相同的列的数据框:
> 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
答案 0 :(得分:4)
我们可以使用melt
中的data.table
library(data.table)
names(df) <- make.unique(names(df))
melt(setDT(df), measure = patterns("^X", "^Y"))
答案 1 :(得分:0)
library(tidyverse)
library(tidyselect)
df %>% pivot_longer(everything(),
names_to = c(".value", "set"),
names_pattern = "(.)(.)")