我要转换此表(Csp_raw)
| CSp|注|
| - ------|- ------|
| 十二至十三页|小行星4167|
| 第十二至十三页、第一二八至一二九页|五个|
| 第12至13页、第128至129页、第73至74页|六个|
| 第十二至十三页、第四十一至四十二页|三个|
| 第12至13页、第41至42页、第128至129页、第73至74页|第二章|
| 第12至13页、第41至42页、第73至74页|四个|
| 第十二至十三页、第七十三至七十四页|二百五十五|
| 第128页至第129页|十八|
| 第128页至第129页、第73页至第74页|二十三|
| 第四十一至四十二页|五十八|
| 第四十一至四十二页、第一二八至一二九页|1个|
| 第41至42页、第128至129页、第73至74页|十二|
| 第四十一至四十二页、第七十三至七十四页|二十六|
| 小六至小七|1个|
| 第七十三至七十四页|六零八|
导入此表(Csp_table):
| 十二至十三页|第128页至第129页|第七十三至七十四页|第四十一至四十二页|小六至小七|
| - ------|- ------|- ------|- ------|- ------|
| 小行星41946|六十七|九三六|一百零六|1个|
我使用这个代码:
tmp_colname <- str_c(CSp_raw$CSp, collapse = ',') %>%
str_split(pattern = ',')
CSp_table <- lapply(tmp_colname, function(p){
list(data.frame(p[1], p[2], p[3], p[4], p[5]))
})
CSp_table <- data.frame(CSp_table) %>%
rename('P12-P13' = 'p.1.', 'P128-P129' = 'p.2.', 'P73-P74' = 'p.3.', 'P41-P42' = 'p.4.', 'P6-P7' = 'p.5.')
CSp_tmp <- CSp_raw %>%
filter(str_detect(CSp, 'P12-P13')) # repeat for each variables
CSp_table[,'P12-P13'] <- sum(CSp_tmp$nb) # repeat for each variables
我有许多数据 Csp_raw 其中 Csp_raw$Csp 的变化,所以我需要一个更有效和可复制的代码。谢谢
3条答案
按热度按时间wn9m85ua1#
您可以按如下方式使用数据表:
如果您更喜欢转置的表(如您的请求中所示),您可以简单地对创建的表调用函数
transpose
。cvxl0en22#
拆分为新行,然后按总和分组:
或者使用tidyr:
wkyowqbh3#
我喜欢使用
splitstackshape::cSplit_e
将这种“多选”列转换为二进制列。数据
创建于2023年3月17日,使用reprex v2.0.2