我有一个带有多个.
分隔符的数据框。我希望删除最后一次出现的字符,.
但前提是它是数字。因此,在下面的示例中,a.b.c
将保持不变,但a.b.1
将变为两个值:a.b
和1
。我想我已经接近了,但无法弄清楚最后的片段。
have <- data.frame(x = c("a.b", "a.b.c", "a.b.1", "a.b.2", "9.a.b.c"))
want <- data.frame(x = c("a.b", "a.b.c", "a.b", "a.b", "9.a.b.c"),
y = c(0, 0, 1, 2, 0))
# attempt 1
have %>% mutate(y = sub('.*\\.', '', x))
# attempt 2
have %>% separate(x, c('y', 'z'), sep = '.*\\.', extra = 'merge', remove = FALSE)
这是一个单独的tidyverse解决方案
library("tidyr")
have %>%
separate(x, c("x", "y"), "\\.(?=\\d+$)", fill="right") %>%
replace_na(list(y=0))
x y
1 a.b 0
2 a.b.c 0
3 a.b 1
4 a.b 2
5 9.a.b.c 0
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句