函数,库(tidyverse)
我一直在使用库(tidyverse)中的函数separate()将值分隔为不同的列:函数,库(tidyverse),r,dataframe,split,tidyverse,R,Dataframe,Split,Tidyverse,我一直在使用库(tidyverse)中的函数separate()将值分隔为不同的列: 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.
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>
由于您没有覆盖默认的sep
,因此它会查找任何不是字母或数字的内容。仅供参考,[^[:alnum:]+
类似于[^A-Za-z0-9]+
,它匹配“不在A-Z、A-Z或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>
sep=“[^[:alnum:][%]+”,extra=“drop”)
#警告:1个位置的值太少:2
##A tible:2×3
#x y z
# *
# 1 45% 10 89
# 2 34%
编辑:使用最新的样本数据:
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
sep(数据帧(a=c(“45%(10/89)”,“34%,”,“67%,“78%(89/98)”),a,c('x','y','z'),sep=“[^[:alnum:]%+”,extra=“drop”)
#警告:3个位置的值太少:2、3、4
##A tible:5×3
#x y z
# *
# 1 45% 10 89
# 2 34%
# 3
# 4 67%
# 5 78% 89 98
它对我有效。“不起作用”对你来说到底意味着什么?我没有得到45 10 89,而是得到了7 7 6,我认为这是一个考虑因素,数字与这些因素相对应。Mee,输出7 7 6
毫无意义,即使考虑到stringsafactors=TRUE
(这不会改变它)。如果我下面的回答不符合您的需要,我认为您需要在问题中添加dput(head(dd))
(或包含您刚才描述的行为的特定行)的输出,从而使这个问题更进一步。是的,我知道输出7 6没有意义。我认为是因为变量中某些行中的数据根本没有数据,例如:“75%(10/11)”,“45%”
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