删除 data.table 之前/中字符中的值并将它们放在不同的列中
Removing values in a character before / in data.table and placing those in a different column
我有一个data.table dt
> dt <- data.table(ch = c("573427/02", "01/17", "030845/84", "15/03", "01", "02", "03", "56/03"), seq = c("23", "32456", "13", "657489", "879605", "564734", "657432", "657431"))
> dt
ch seq
1: 573427/02 23
2: 01/17 32456
3: 30845/84 13
4: 15/03 657489
5: 01 879605
6: 02 564734
7: 03 657432
8: 56/03 657431
我想清理数据中的 ch
和 seq
列。
1) 我想删除 ch
中的 / 和之前的值,并且只想保留 /.
之后的字符
2) 如果没有 / present 那么它应该保持原样(记录 5, 6,7
不得更改)。
3) 如果 ch
中 / 之前的字符数是 5 或 6,则将该值放入 seq
.
我的结果一定是这样的。
> dt
ch seq
1: 02 573427
2: 17 32456
3: 84 30845
4: 03 657489
5: 01 879605
6: 02 564734
7: 03 657432
8: 03 657431
我如何在 Rdata.table 中执行此操作
使用:
dt[grepl('/',ch) & nchar(sub('/.*','',ch)) %in% 5:6, seq := sub('/.*','',ch)
][, ch := sub('.*/','',ch)][]
给出:
ch seq
1: 02 573427
2: 17 32456
3: 84 030845
4: 03 657489
5: 01 879605
6: 02 564734
7: 03 657432
8: 03 657431
我有一个data.table dt
> dt <- data.table(ch = c("573427/02", "01/17", "030845/84", "15/03", "01", "02", "03", "56/03"), seq = c("23", "32456", "13", "657489", "879605", "564734", "657432", "657431"))
> dt
ch seq
1: 573427/02 23
2: 01/17 32456
3: 30845/84 13
4: 15/03 657489
5: 01 879605
6: 02 564734
7: 03 657432
8: 56/03 657431
我想清理数据中的 ch
和 seq
列。
1) 我想删除 ch
中的 / 和之前的值,并且只想保留 /.
2) 如果没有 / present 那么它应该保持原样(记录 5, 6,7 不得更改)。
3) 如果 ch
中 / 之前的字符数是 5 或 6,则将该值放入 seq
.
我的结果一定是这样的。
> dt
ch seq
1: 02 573427
2: 17 32456
3: 84 30845
4: 03 657489
5: 01 879605
6: 02 564734
7: 03 657432
8: 03 657431
我如何在 Rdata.table 中执行此操作
使用:
dt[grepl('/',ch) & nchar(sub('/.*','',ch)) %in% 5:6, seq := sub('/.*','',ch)
][, ch := sub('.*/','',ch)][]
给出:
ch seq 1: 02 573427 2: 17 32456 3: 84 030845 4: 03 657489 5: 01 879605 6: 02 564734 7: 03 657432 8: 03 657431