如何解决扩大枢轴,而不创建列表列或过多的行
我有一个字符串模式的数据帧,当前是长格式(如下),但是我需要宽格式。
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")),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
这是我想要的输出
# 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
但是使用以下命令,我只能得到以下输出:
df %>%
mutate(row = row_number()) %>%
pivot_wider(names_from = char_n,values_from=lep) %>% select(-row) %>%
janitor::clean_names(.)
# A tibble: 11 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 NA NA NA NA NA NA NA NA NA
2 e NA efe NA NA NA NA NA NA NA NA
3 e NA NA efef NA NA NA NA NA NA NA
4 e NA NA NA efefe NA NA NA NA NA NA
5 e NA NA NA NA efefef NA NA NA NA NA
6 e NA NA NA NA NA efefefe NA NA NA NA
7 e NA NA NA NA NA NA efefefef NA NA NA
8 e NA NA NA NA NA NA NA efefefefe NA NA
9 e NA NA NA NA NA NA NA NA efefefefef NA
10 e NA NA NA NA NA NA NA NA NA efefefefefef
11 e eg NA NA NA NA NA NA NA NA NA
我不确定是否将更改方式更改为更宽的格式,或者后面的步骤是否应该不同?
任何帮助将不胜感激!
解决方法
我们基于列'char_n'创建'rn',然后使用pivot_wider
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)
-输出
# 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>
,
在基数R中,您可以使用reshape
:
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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。