r - 将名称不规则的列转为行

标签 r pivot

使用 R 如何将列旋转为行以从 df2 获取 df3 中所需的结构,同时从先前的数据帧中提取新信息:

df2<- structure(list(A=c("A_1_01", "A_1_01", "A_1_01"), B=c("A", "A", "A"), C=c("1", "1", "1"), D=c("inside", "eating", "sleeping"), "1"=c("1","1","0"), "2"=c("1","0","0"), "3"=c("0","0","1"), "4"=c("0","1","1"), "1_Location"=c("I","I", "I"), "2_Location"=c("I","I", "I"), "3_Location"=c("O","O", "O"), "4_Location"=c("O","O", "O")), class= "data.frame", row.names = c(NA,-3L))
df3<- structure(list(H=c("1","2","3","4","1","2","3","4","1","2","3","4"),
                     A=c("A_1_01", "A_1_01", "A_1_01","A_1_01", "A_1_01",
                         "A_1_01","A_1_01", "A_1_01", "A_1_01","A_1_01",
                         "A_1_01", "A_1_01"),
                     B=c("A", "A", "A","A", "A", "A","A", "A", "A","A", "A", "A"),
                     C=c("1", "1", "1","1", "1", "1","1", "1", "1","1", "1", "1"),
                     D=c("inside","inside","inside","inside",
                         "eating","eating","eating","eating",
                         "sleeping","sleeping","sleeping","sleeping"),
                     Value=c(1,1,0,0,1,0,0,1,0,0,1,1),
                     Location=c("I","I","O","O","I","I","O","O","I","I","O","O")),
                class= "data.frame", row.names = c(NA,-12L))

谢谢

最佳答案

向纯数字列名称添加后缀“_Value”后尝试使用 pivot_longer

library(stringr)
library(tidyr)
library(dplyr)
df2 %>% 
 rename_with(~ str_c(.x, "_Value"), matches("^\\d+$")) %>% 
 pivot_longer(cols = contains("_"), names_to  = c("H", ".value"), 
    names_pattern = "(\\d+)_(.*)")

-输出

# A tibble: 12 × 7
   A      B     C     D        H     Value Location
   <chr>  <chr> <chr> <chr>    <chr> <chr> <chr>   
 1 A_1_01 A     1     inside   1     1     I       
 2 A_1_01 A     1     inside   2     1     I       
 3 A_1_01 A     1     inside   3     0     O       
 4 A_1_01 A     1     inside   4     0     O       
 5 A_1_01 A     1     eating   1     1     I       
 6 A_1_01 A     1     eating   2     0     I       
 7 A_1_01 A     1     eating   3     0     O       
 8 A_1_01 A     1     eating   4     1     O       
 9 A_1_01 A     1     sleeping 1     0     I       
10 A_1_01 A     1     sleeping 2     0     I       
11 A_1_01 A     1     sleeping 3     1     O       
12 A_1_01 A     1     sleeping 4     1     O           

关于r - 将名称不规则的列转为行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75654689/

相关文章:

r - R 中具有矩阵运算的 Margrittr 管道

r - 如何在 R 中为 tableGrob 自定义特定列?

r - 仅当用户查看输出时才进行 Shiny 计算

Python:DataFrame.melt - 如何选择一系列列作为标识符变量?

python - 从Pandas数据框中仅解冻列的一部分

mysql - (行到列/数据透视)+ SUM

具有动态列的 MySQL 数据透视表查询

r - 在R中的字符串后提取日期

r - CAPM.jensenAlpha 不适用于 Ubuntu

php - 获取 'pivot'表中的所有字段