使用 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/