【发布时间】:2019-09-06 02:16:53
【问题描述】:
我试图在一列字符串中分隔数字和字符。到目前为止,我一直在使用tidyr::separate 来执行此操作,但遇到“不寻常”情况的错误。
假设我有以下数据
df <- data.frame(c1 = c("5.5K", "2M", "3.1", "M"))
我想获得一个带有列的数据框
data.frame(c2 = c("5.5", "2", "3.1", NA),
c3 = c("K", "M", NA, "M))
到目前为止我一直在使用tidyr::separate
df %>%
separate(c1, into =c("c2", "c3"), sep = "(?<=[0-9])(?=[A-Za-z])")
但这仅适用于前三种情况。我意识到这是因为?<=... 和?=... 需要正则表达式的存在。如何修改此代码以捕获字母前缺少数字的情况?也曾尝试使用extract 功能,但没有成功。
编辑:我想一种解决方案是将其分解为
df$col2 <- as.numeric(str_extract(df$col1, "[0-9]+"))
df$col3 <- (str_extract(df$col1, "[aA-zZ]+"))
但我很好奇是否有其他方法来处理它。
【问题讨论】: