我在小标题中有一列小数,希望将其分为整数和非整数部分。如果小数点后的部分正好为零,则separate()
函数会将其变为NA
。
library("tidyverse") # or
# library("tibble")
# library("tidyr")
x <- c(1992.345, 1993.000, 1993.544)
y <- c(31.2, 32.3, 33.4)
dat <- tibble(x, y)
dat %>%
separate(x,
into = c("x1", "x2"),
convert = TRUE,
fill = "right")
#> # A tibble: 3 x 3
#> x1 x2 y
#> <int> <int> <dbl>
#> 1 1992 345 31.2
#> 2 1993 NA 32.3
#> 3 1993 544 33.4
我想告诉separate()
保留零而不是将其替换为NA
吗?我知道我可以mutate()
和replace_na()
,例如
dat %>%
separate(x,
into = c("x1", "x2"),
convert = TRUE,
fill = "right") %>%
mutate(x2 = replace_na(x2, 0))
#> # A tibble: 3 x 3
#> x1 x2 y
#> <int> <dbl> <dbl>
#> 1 1992 345 31.2
#> 2 1993 0 32.3
#> 3 1993 544 33.4
问题:我可以跳过mutate()
步骤,并在NA
步骤中将separate()
替换为零吗?或者,这是否尽可能简洁?我愿意接受其他解决方案。
由reprex package(v0.2.1)于2018-11-07创建
答案 0 :(得分:4)
在使用x
函数之前,我们可以格式化separate
列。
dat %>%
mutate(x = format(x, nsmall = 3)) %>%
separate(x,
into = c("x1", "x2"),
convert = TRUE,
fill = "right")
# # A tibble: 3 x 3
# x1 x2 y
# <int> <int> <dbl>
# 1 1992 345 31.2
# 2 1993 0 32.3
# 3 1993 544 33.4