【发布时间】:2021-08-12 23:58:01
【问题描述】:
数据框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 中有多达 20 个逗号的情况下工作。我正在寻找更优雅、更有活力的替代品。
【问题讨论】:
标签: r regex string vector data-cleaning