R 在不创建列表列或过多行的情况下将数据透视得更宽
我有一个字符串模式的数据帧,目前是长格式的(如下),但我需要一个宽格式R 在不创建列表列或过多行的情况下将数据透视得更宽,r,dplyr,tidyr,R,Dplyr,Tidyr,我有一个字符串模式的数据帧,目前是长格式的(如下),但我需要一个宽格式 df <- structure(list(lep = c("ef", "efe", "efef", "efefe", "efefef", "efefefe", "efefefef", "efefefefe&quo
df <- structure(list(lep = c("ef", "efe", "efef", "efefe", "efefef",
"efefefe", "efefefef", "efefefefe", "efefefefef", "efefefefefef",
"eg"), char_n = c(2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 12L, 2L
), char_1 = c("e", "e", "e", "e", "e", "e", "e", "e", "e", "e",
"e")), row.names = c(NA, -11L), class = c("tbl_df", "tbl", "data.frame"
))
# A tibble: 11 x 3
lep char_n char_1
<chr> <int> <chr>
1 ef 2 e
2 efe 3 e
3 efef 4 e
4 efefe 5 e
5 efefef 6 e
6 efefefe 7 e
7 efefefef 8 e
8 efefefefe 9 e
9 efefefefef 10 e
10 efefefefefef 12 e
11 eg 2 e
df%
变异(行=行编号())%>%
透视图(名称从=char\u n,值从=lep)%>%select(-row)%>%
清洁工:清洁工人姓名(.)
#一个tibble:11x11
字符1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x12
1 e ef NA NA NA NA NA NA
2 e-NA-efe-NA-NA-NA-NA
3 e-NA-NA-eff-NA-NA-NA-NA
4 e-NA-NA-NA-NA-NA-NA-NA-NA-NA
5 e-NA-NA-NA-NA-NA-NA-NA-NA-NA-NA-NA
6 e钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠
7 e钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠钠
8 e-NA-NA-NA-NA-efefefe-NA-NA
9 e NA NA NA NA NA NA EFEFEF NA
10e-NA-NA-NA-NA-NA-efefefefef
11 e eg-NA-NA-NA-NA-NA-NA
我不确定是改变我正在改变的更广泛的格式,还是之后的步骤应该有所不同
任何帮助都将不胜感激 我们根据“char\u n”列创建“rn”,然后使用
pivot\u wide
library(dplyr)
library(tidyr)
library(stringr)
df %>%
mutate(
rn = cumsum(c(TRUE, diff(char_n) < 0)), char_n = str_c('x', char_n)) %>%
pivot_wider(names_from = char_n, values_from = lep) %>%
select(-rn)
库(dplyr)
图书馆(tidyr)
图书馆(stringr)
df%>%
变异(
rn=cumsum(c(TRUE,diff(char_n)<0)),char_n=str_c('x',char_n))%>%
枢轴宽度(名称\u from=char\u n,值\u from=lep)%>%
选择(-rn)
-输出
# A tibble: 2 x 11
# char_1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x12
# <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#1 e ef efe efef efefe efefef efefefe efefefef efefefefe efefefefef efefefefefef
#2 e eg <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
#一个tible:2 x 11
#字符1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x12
#
#1 EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF
#2 e eg
在base R中,您可以使用重塑
:
reshape(transform(df, id = cumsum(c(0,diff(char_n)<0))),
dir='wide', idvar = c('char_1','id'), timevar = 'char_n')
char_1 id lep.2 lep.3 lep.4 lep.5 lep.6 lep.7 lep.8 lep.9 lep.10 lep.12
1 e 0 ef efe efef efefe efefef efefefe efefefef efefefefe efefefefef efefefefefef
11 e 1 eg <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
重塑(变换(df,id=cumsum(c(0,diff)(字符)
# A tibble: 2 x 11
# char_1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x12
# <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
#1 e ef efe efef efefe efefef efefefe efefefef efefefefe efefefefef efefefefefef
#2 e eg <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>
reshape(transform(df, id = cumsum(c(0,diff(char_n)<0))),
dir='wide', idvar = c('char_1','id'), timevar = 'char_n')
char_1 id lep.2 lep.3 lep.4 lep.5 lep.6 lep.7 lep.8 lep.9 lep.10 lep.12
1 e 0 ef efe efef efefe efefef efefefe efefefef efefefefe efefefefef efefefefefef
11 e 1 eg <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA> <NA>