![](/img/trans.png)
[英]Issues with accent when using the "separate" function from tidyverse
[英]separate() function, library(tidyverse)
我一直在使用来自library(tidyverse)的功能split()将值分成不同的列:
45 (10, 89)
34
和代码:
dd %>% separate(a, c("x","y","z"), extra="drop")
我得到了想要的东西:
45 10 89
34
但是现在,我的变量具有不同的格式,无法正常工作:
45% (10,89)
34%
为什么使用符号“%”时不起作用?
******编辑:好的,我知道为什么不起作用,这是因为数据中的小数点符号:
4.5% (10/89)
3.4%
6.7%
7.8% (89/98)
如何使用单独的函数处理小数? 非常感谢你!!
谢谢!
我推断当您说“不起作用”时,是因为百分号已被删除:
separate(data_frame(a=c("45 (10, 89)","34")), a, c('x','y','z'), extra="drop")
# Warning: Too few values at 1 locations: 2
# # A tibble: 2 × 3
# x y z
# * <chr> <chr> <chr>
# 1 45 10 89
# 2 34 <NA> <NA>
separate(data_frame(a=c("45% (10, 89)","34%")), a, c('x','y','z'), extra="drop")
# Warning: Too few values at 1 locations: 2
# # A tibble: 2 × 3
# x y z
# * <chr> <chr> <chr>
# 1 45 10 89
# 2 34 <NA>
与?separate
:
separate(data, col, into, sep = "[^[:alnum:]]+", remove = TRUE, convert = FALSE, extra = "warn", fill = "warn", ...) ...
由于您没有覆盖sep
的默认值,因此它将查找不是字母或数字的任何内容。 FYI, [^[:alnum:]]+
与[^A-Za-z0-9]+
类似,它匹配“ 1个或多个不在AZ,az或0-9字符范围内的字符”。
只需提供更详细的sep
,您就会得到想要的东西。
separate(data_frame(a=c("45% (10, 89)","34%")), a, c('x','y','z'), sep="[^[:alnum:]%]+", extra="drop")
# Warning: Too few values at 1 locations: 2
# # A tibble: 2 × 3
# x y z
# * <chr> <chr> <chr>
# 1 45% 10 89
# 2 34% <NA> <NA>
编辑 :使用最新的样本数据:
separate(data_frame(a=c("45% (10/89)","34%","","67%","78% (89/98)")), a, c('x','y','z'), sep="[^[:alnum:]%]+", extra="drop")
# Warning: Too few values at 3 locations: 2, 3, 4
# # A tibble: 5 × 3
# x y z
# * <chr> <chr> <chr>
# 1 45% 10 89
# 2 34% <NA> <NA>
# 3 <NA> <NA>
# 4 67% <NA> <NA>
# 5 78% 89 98
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.