使用列索引 r

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

我有一个df:

df1 <- data.frame(ID = c('a', 'b', 'c', 'c1', 'd', 'e', 'f', 'g', 'h', 'h1'),
                  var2 = c(7, 9, 2, 4, 3, 6, 8, 2, 1, 2),
                  var3 = c(21, 50, 40, 30, 29, 45, 33, 51, 70, 46),
                  var4 = c(1, 5, 2, 4, 1, 2, 3, 3, 5, 1))

我想将其从宽格式转换为长格式。我需要对具有不同列名和编号的多个不同数据框重复执行此操作。要转换的列始终位于第二列和最后一列之间,使用如下所示:

data_long <- gather(df1, ID, num, df1[c(2:ncol(df1))], factor_key=TRUE)

输出如下所示:

> data_long
     ID num
1  var2   7
2  var2   9
3  var2   2
4  var2   4
5  var2   3
6  var2   6
7  var2   8
8  var2   2
9  var2   1
10 var2   2
11 var3  21
12 var3  50
13 var3  40
14 var3  30
15 var3  29
16 var3  45
17 var3  33
18 var3  51
19 var3  70
20 var3  46
21 var4   1
22 var4   5
23 var4   2
24 var4   4
25 var4   1
26 var4   2
27 var4   3
28 var4   3
29 var4   5
30 var4   1
r reshape
1个回答
0
投票

是你想要的吗?

tidyr::pivot_longer(df1, -ID)

# A tibble: 30 × 3
   ID    name  value
   <chr> <chr> <dbl>
 1 a     var2      7
 2 a     var3     21
 3 a     var4      1
 4 b     var2      9
 5 b     var3     50
 6 b     var4      5
 7 c     var2      2
 8 c     var3     40
 9 c     var4      2
10 c1    var2      4
# ℹ 20 more rows
# ℹ Use `print(n = ...)` to see more rows

甚至

pivot_longer(df1, -1)
如果
ID
列名称也可能会更改

© www.soinside.com 2019 - 2024. All rights reserved.