mutate 不适用于 na.spline/na.approx
mutate does not work with na.spline/na.approx
我尝试在 mutate 中使用 na.approx() 和 na.spline(),但是输出向量的长度是错误的,我得到以下错误
Error: Column `var_1 <- na.approx(var_1, na.rm = F)` must be length 1 (the group size), not 2
test <- tibble(group_1 = c(1,1,1,1,1),group_2 = c(1,1,1,2,2),var_1 = c(1,NA,2,1,NA),var_2 = c(1,1,NA,NA,NA))
group_1 group_2 var_1 var_2
<dbl> <dbl> <dbl> <dbl>
1 1 1 1 1
2 1 1 NA 1
3 1 1 2 NA
4 1 2 1 NA
5 1 2 NA NA
test <- test %>%
group_by(group_1,group_2) %>%
mutate(
var_1 <- na.approx(var_1,na.rm = F),
var_2 <- na.spline(var_2,na.rm = F))
期望:
# A tibble: 5 x 4
group_1 group_2 var_1 var_2
<dbl> <dbl> <dbl> <dbl>
1 1 1 1 1
2 1 1 1.5 1
3 1 1 2 1
4 1 2 1 NA
5 1 2 1 NA
编辑:
当我使用@akrun 建议的解决方案时,我仍然得到:
Error: Column `var_1` must be length 16 (the group size) or one, not 14
这里,mutate
里面的<-
就是问题所在。 mutate
里面需要=
library(dplyr)
test %>%
group_by(group_1,group_2) %>%
mutate(var_1 = na.approx(var_1,na.rm = FALSE),
var_2 = if(all(is.na(var_2))) NA else na.spline(var_2,na.rm = FALSE))
最后起作用的是:
test <- test %>%
group_by(group_1,group_2) %>%
arrange(group_1) %>%
mutate(
var_1 = na.approx(var_1,na.rm = FALSE),
var_1 = if(all(is.na(var_1))) NA else na.spline(var_1,na.rm = FALSE),
var_2 = if(all(is.na(var_2))) NA else na.spline(var_2,na.rm = FALSE))
我尝试在 mutate 中使用 na.approx() 和 na.spline(),但是输出向量的长度是错误的,我得到以下错误
Error: Column `var_1 <- na.approx(var_1, na.rm = F)` must be length 1 (the group size), not 2
test <- tibble(group_1 = c(1,1,1,1,1),group_2 = c(1,1,1,2,2),var_1 = c(1,NA,2,1,NA),var_2 = c(1,1,NA,NA,NA))
group_1 group_2 var_1 var_2
<dbl> <dbl> <dbl> <dbl>
1 1 1 1 1
2 1 1 NA 1
3 1 1 2 NA
4 1 2 1 NA
5 1 2 NA NA
test <- test %>%
group_by(group_1,group_2) %>%
mutate(
var_1 <- na.approx(var_1,na.rm = F),
var_2 <- na.spline(var_2,na.rm = F))
期望:
# A tibble: 5 x 4
group_1 group_2 var_1 var_2
<dbl> <dbl> <dbl> <dbl>
1 1 1 1 1
2 1 1 1.5 1
3 1 1 2 1
4 1 2 1 NA
5 1 2 1 NA
编辑:
当我使用@akrun 建议的解决方案时,我仍然得到:
Error: Column `var_1` must be length 16 (the group size) or one, not 14
这里,mutate
里面的<-
就是问题所在。 mutate
=
library(dplyr)
test %>%
group_by(group_1,group_2) %>%
mutate(var_1 = na.approx(var_1,na.rm = FALSE),
var_2 = if(all(is.na(var_2))) NA else na.spline(var_2,na.rm = FALSE))
最后起作用的是:
test <- test %>%
group_by(group_1,group_2) %>%
arrange(group_1) %>%
mutate(
var_1 = na.approx(var_1,na.rm = FALSE),
var_1 = if(all(is.na(var_1))) NA else na.spline(var_1,na.rm = FALSE),
var_2 = if(all(is.na(var_2))) NA else na.spline(var_2,na.rm = FALSE))