微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 中用于分类数据的行到列w 通用编号列?

如何解决R 中用于分类数据的行到列w 通用编号列?

我需要将长数据转换为宽数据,但需要根据需要创建新的编号列(col1、col2 等)。 (换句话说,col 名称不是从键中获取的,而是一般生成的。)所以从这样的事情:

d <- data.frame(row_id = c(1,1,2,3,3),cat = c("a","b","a","d","e","f","g"))

  row_id cat
1      1   a
2      1   b
3      2   a
4      2   d
5      2   e
6      3   d
7      3   f
8      3   g

这样的事情:

row_id,cat1,cat2,cat3
1,a,b,d,e
3,f,g

spread() 和 pivot_wider() 并不真正符合要求,因为我正在处理分类值和大量类别(但每个 ID 不超过 8 个)。在 python 中,我可能会遍历行,将新的键:值对 ("cat"+i:"a") 附加到列表(或其他东西)中的字典,但不确定 R 或如果有更好的方法

解决方法

我们通过'row_id'创建一个序列列,然后使用pivot_wider

library(dplyr)
library(tidyr)
library(stringr)
library(data.table)
d %>% 
  mutate(rn = str_c('cat',rowid(row_id))) %>%
  pivot_wider(names_from = rn,values_from = cat)

-输出

# A tibble: 3 x 4
#  row_id cat1  cat2  cat3 
#   <dbl> <chr> <chr> <chr>
#1      1 a     b     <NA> 
#2      2 a     d     e    
#3      3 d     f     g    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。