我使用separate()函数来拆分列:Enterdateofexam2,它是字符格式,值类似于“25.07”,“13.09”,“16.06”...我的目标是将其拆分为天(25)和月(07),然后使用convert = true 将它们转换为数字以供下一步过滤。
我的代码是:
jimma3n <- jimma3 %>%
select(Enterdateofexam2, Enterdayofexam, UniqueKey,MEDICALRECORD)%>%
separate(Enterdateofexam2,into=c("day", "month"), sep=".", convert = TRUE)
view (jimma3n)
Run Code Online (Sandbox Code Playgroud)
但 R 不断警告我:
Expected 2 pieces. Additional pieces discarded in 4088 rows [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...].
Run Code Online (Sandbox Code Playgroud)
那么有人可以帮助找出我的代码的哪一部分是错误的吗?谢谢~~!
我们可以使用extra论证。另外,默认情况下,sep处于regex模式 - 根据?separate文档
sep - 如果是字符,则 sep 被解释为正则表达式。默认值是匹配任何非字母数字值序列的正则表达式。
and.是一个元字符,可以匹配任何字符。因此,我们可能需要转义 ( \\.) 或将其放在方括号 ( [.]) 中。另外,基于dput,该列是 a list,unnest在执行之前应先对其进行编辑separate
library(dplyr)
library(tidyr)
jimma3 %>%
select(Enterdateofexam2, Enterdayofexam, UniqueKey,MEDICALRECORD)%>%
unnest(Enterdateofexam2) %>%
separate(Enterdateofexam2,into=c("day", "month"),
sep="\\.", convert = TRUE, extra = "merge") %>%
na.omit
Run Code Online (Sandbox Code Playgroud)
-输出
# A tibble: 6 x 5
day month Enterdayofexam UniqueKey MEDICALRECORD
<int> <int> <chr> <chr> <chr>
1 7 6 1 530 577207
2 8 6 2 530 577207
3 9 6 3 530 577207
4 2 12 1 531 575333
5 3 12 2 531 575333
6 4 12 3 531 575333
Run Code Online (Sandbox Code Playgroud)
基本上,对于sep = ".",它在每个字符元素处分裂,因此弹出警告
jimma3 <- structure(list(Enterdateofexam2 = list(c("", "7.06"), c("", "8.06"
), c("", "9.06"), c("", "2.12"), c("", "3.12"), c("", "4.12")),
Enterdayofexam = c("1", "2", "3", "1", "2", "3"), UniqueKey = c("530",
"530", "530", "531", "531", "531"), MEDICALRECORD = c("577207",
"577207", "577207", "575333", "575333", "575333")), row.names = c(NA,
-6L), class = c("tbl_df", "tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)