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>