r - R - 将 i 个逗号分隔 ID 的字符向量分解为数据帧的 i 个离散向量
问题描述
数据帧df
包括两个字符向量。以下是前 10 行:
rowid codes_raw
a 15-1132, 15-1133
b 21-1091, 21-1094, 21-1099
c 25-9011, 25-9021, 25-9031, 25-9099
d 31-9093, 31-9099
e 33-9092, 33-9099
f 37-2011, 37-2019
g 39-4011, 39-4021
h 47-5051, 47-5099
i 49-2094, 49-2095
j 49-9041
df$codes_raw
包含给定行的 1 到 i 个离散标识符。这些标识符需要分布在同一数据帧中的 i 个新向量中。结果应如下所示:
rowid codes_raw code_1 code_2 code_3 code_4
a 15-1132, 15-1133 15-1132 15-1133
b 21-1091, 21-1094, 21-1099 21-1091 21-1094 21-1099
c 25-9011, 25-9021, 25-9031, 25-9099 25-9011 25-9021 25-9031 25-9099
d 31-9093, 31-9099 31-9093 31-9099
e 33-9092, 33-9099 33-9092 33-9099
f 37-2011, 37-2019 37-2011 37-2019
g 39-4011, 39-4021 39-4011 39-4021
h 47-5051, 47-5099 47-5051 47-5099
i 49-2094, 49-2095 49-2094 49-2095
j 49-9041 49-9041
if_else()
我当前的解决方案涉及对每个字符串的单独调用,这很笨重。例如:
df$code_2 <- if_else(
grepl(',', df$codes_raw),
sub('.*,\\s*', '', df$codes_raw),
' ')
我还希望该解决方案在df$codes_raw
. 我正在寻找更优雅和更有活力的替代品。
解决方案
使用“分离()”
library(tidyr)
lengths <- max(sapply(strsplit(df$codes_raw, split= ", "), length))
names <- sapply(seq(lengths), function(x) paste0("code_", x))
df %>%
separate(codes_raw,
into = names, sep = ", " , remove = FALSE)
rowid codes_raw code_1 code_2 code_3 code_4
1 a 15-1132,15-1133 15-1132 15-1133 <NA> <NA>
2 b 21-1091,21-1094,21-1099 21-1091 21-1094 21-1099 <NA>
3 c 25-9011,25-9021,25-9031,25-9099 25-9011 25-9021 25-9031 25-9099
4 d 31-9093,31-9099 31-9093 31-9099 <NA> <NA>
5 e 33-9092,33-9099 33-9092 33-9099 <NA> <NA>
6 f 37-2011,37-2019 37-2011 37-2019 <NA> <NA>
7 g 39-4011,39-4021 39-4011 39-4021 <NA> <NA>
8 h 47-5051,47-5099 47-5051 47-5099 <NA> <NA>
9 i 49-2094,49-2095 49-2094 49-2095 <NA> <NA>
10 j 49-9041 49-9041 <NA> <NA> <NA>
推荐阅读
- android - android.content.Context.getSharedPreferences(java.lang.String, int)' 在空对象引用 id DBhandler 上
- android - Flutter - 按下返回按钮到android主屏幕时丢失状态
- android - 从当前用户firestore查询kotlin android获取db
- python - Firestore:使用 python 列出文档的子集合
- c# - Swashbuckle/Swagger - 我如何要求 apiKey 用于某个操作/在每个操作级别?
- node.js - 将 NPM 脚本作为 crontab (Ubuntu) 运行不起作用
- azure - 有没有办法安排(通过应用程序用户)调用 Azure 生态系统中的 URL?
- html - CSS - 溢出-y:滚动;
- python - 图像从部署到 heroku 的 django web 应用程序中消失
- excel - Excel公式在单元格末尾有条件地替换