r - 当行之间的片段数不同时将字符串拆分为三列

标签 r

我有一个类似于以下代表的数据框:

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/

相关文章:

r - 我可以使用 geom_text_repel 控制相同值的多个标签的顺序吗?

r - 在 R 中索引冗余命名的向量

r - 修剪错误?未删除前导空格

r - 如何计算R中列中多个变量的频率

r - 我的类(class)怎么了?

sql-server - 为什么通过函数调用 dbListTables 时会给出警告消息? (R DBI)

R 耗时重复功能的改进

r - 在 R 中向量化使用唯一函数的 for 循环

r - 如何为write.table中的每个.txt生成随机数

如果列表之间不共享,则从列表中删除项目