R将宽数据转换为长数据

R将宽数据转换为长数据,r,dataframe,tidyverse,data-conversion,R,Dataframe,Tidyverse,Data Conversion,如何从以下内容转换数据: example <- data.frame(RTD_1_LOC = c('A', 'B'), RTD_2_LOC = c('C', 'D'), RTD_3_LOC = c('E', 'F'), RTD_4_LOC = c('G', 'H'), RTD_5_LOC = c('I', 'J'),RTD_1_OFF = c('1', '2'), RTD_2_OFF = c('3',

如何从以下内容转换数据:

example <- data.frame(RTD_1_LOC = c('A', 'B'), RTD_2_LOC = c('C', 'D'),
                      RTD_3_LOC = c('E', 'F'), RTD_4_LOC = c('G', 'H'),
                      RTD_5_LOC = c('I', 'J'),RTD_1_OFF = c('1', '2'), RTD_2_OFF = c('3', '4'),
                      RTD_3_OFF = c('5', '6'), RTD_4_OFF = c('7', '8'),
                      RTD_5_OFF = c('9', '10'))
example我们可以使用from
tidyr
并指定
names\u模式
从列名中捕获组。由于“RTD”列应保持不变,请在
名称中指定“RTD”向量和列值(
.value
),以便“RTD”将获得数字捕获(
(\\d+
)和单词(
(\\w+
)“LOC”,“OFF”将创建为具有列值的新列

library(dplyr)
library(tidyr)
 example %>% 
     pivot_longer(cols = everything(), 
      names_to = c("RTD", ".value"), names_pattern = "\\w+_(\\d+)_(\\w+)")
-输出

# A tibble: 10 x 3
   RTD   LOC   OFF  
   <chr> <chr> <chr>
 1 1     A     1    
 2 2     C     3    
 3 3     E     5    
 4 4     G     7    
 5 5     I     9    
 6 1     B     2    
 7 2     D     4    
 8 3     F     6    
 9 4     H     8    
10 5     J     10   
#一个tible:10 x 3
RTD锁定关闭
1 A 1
2 2 C 3
3 E 5
4 G 7
5我9
6 1 B 2
7 2 D 4
8 3 F 6
9 4小时8
10 5 J 10
我们可以使用from
tidyr
并指定
names\u模式
从列名中捕获组。由于“RTD”列应保持不变,请在
names\u to
中指定“RTD”向量和列值(
.value
),以便“RTD”将获得数字捕获(
(\\d+
)单词(
(\\w+)
)“LOC”、“OFF”将创建为具有列值的新列

library(dplyr)
library(tidyr)
 example %>% 
     pivot_longer(cols = everything(), 
      names_to = c("RTD", ".value"), names_pattern = "\\w+_(\\d+)_(\\w+)")
-输出

# A tibble: 10 x 3
   RTD   LOC   OFF  
   <chr> <chr> <chr>
 1 1     A     1    
 2 2     C     3    
 3 3     E     5    
 4 4     G     7    
 5 5     I     9    
 6 1     B     2    
 7 2     D     4    
 8 3     F     6    
 9 4     H     8    
10 5     J     10   
#一个tible:10 x 3
RTD锁定关闭
1 A 1
2 2 C 3
3 E 5
4 G 7
5我9
6 1 B 2
7 2 D 4
8 3 F 6
9 4小时8
10 5 J 10