我有数据
S.N Name1 Name2 Name3 Age1 Age2 Age3 Sex1 Sex2, sex3
1 Tom Huc Han 22 60 45 M F M
2 Ham Hut Sut 33 41 27 F M M
我需要数据
S.N Name Age Sex
1 Tom 22 M
2 Huc 60 F
答案 0 :(得分:0)
使用从tidyr
进行透视:
library(tidyverse)
dat <- tribble(~S.N, ~ Name1, ~Name2, ~Name3, ~Age1, ~Age2, ~Age3, ~Sex1, ~Sex2, ~Sex3,
1 , "Tom" , "Huc" , "Han" , 22 , 60 , 45, "M" , "F" , "M" ,
2 , "Ham" , "Hut" , "Sut" , 33 , 41 , 27, "F" , "M" , "M" )
dat %>%
pivot_longer(-S.N, names_to = c(".value", "Person"), names_pattern = "(.*)(\\d)") %>%
select(-Person)
# A tibble: 6 x 4
S.N Name Age Sex
<dbl> <chr> <dbl> <chr>
1 Tom 22 M
1 Huc 60 F
1 Han 45 M
2 Ham 33 F
2 Hut 41 M
2 Sut 27 M
答案 1 :(得分:0)
我不确定您是否想要以下内容
lapply(split.default(df1[-1],gsub(".*(\\d+)","\\1",names(df1[-1]))),function(x) cbind(df1[1],x))
给出
$`1`
S.N Name1 Age1 Sex1
1 1 Tom 22 M
2 2 Ham 33 F
$`2`
S.N Name2 Age2 Sex2
1 1 Huc 60 F
2 2 Hut 41 M
$`3`
S.N Name3 Age3 sex3
1 1 Han 45 M
2 2 Sut 27 M