我有一个类似于以下代表的数据框:
test <- data.frame(
age = c("6 hours", "2 days, 4 hours", "1 months3 days, 7 hours")
)
不幸的是,正如您在第 3 行看到的那样,字符串的三部分并未全部用逗号分隔。
我的预期输出如下:
age agem aged ageh
1 6 hours NA NA 6
2 2 days, 4 hours NA 2 4
3 1 months3 days, 7 hours 1 3 7
我试过像这样使用dplyr::separate
new_test <- test %>%
separate(age, c("agem", "ageh", "aged"), sep = "[^[\\d]]+", convert = TRUE,
remove = FALSE, fill = "left")
这对于只有“小时”的条目非常有用,但如果有“天和小时”或“月、天和小时”,那么输出的顺序是错误的。
非常感谢任何帮助。
最佳答案
您可以使用包 stringr
中的 str_extract
和 (?= ...)
中的积极前瞻:
test$agem <- str_extract(test$age, "\\d+(?=\\smonth)")
test$aged <- str_extract(test$age, "\\d+(?=\\sday)")
test$ageh <- str_extract(test$age, "\\d+(?=\\shour)")
结果:
test
age agem aged ageh
1 6 hours <NA> <NA> 6
2 2 days, 4 hours <NA> 2 4
3 1 months3 days, 7 hours 1 3 7
关于r - 当行之间的片段数不同时将字符串拆分为三列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61822465/