在 R 中的数据帧的标记列上应用 tidyr 中的 replace_na() 等函数时出错

问题描述 投票:0回答:1

当我想在标记的列上应用函数时,出现以下错误。作为示例,我应用了 mean() 函数。

library(tidyr)
library(dplyr)
library(Hmisc)   
df <- data.frame(a = LETTERS[1:5],
                     b = c(1,2,NA,4,5))
    Hmisc::label(df$a) <- "hi hi"
    Hmisc::label(df$b) <- "bye bye"
    
    names(df) <- Hmisc::label(df)
    df %>%
        mutate(`hi hi` = paste0(`hi hi`, "people"),
               `bye bye` = replace_na(`bye bye`, mean(`bye bye`, na.rm = T))) 
    
    #mean(df$`bye bye`, na.rm = T)

错误是:

Error in `mutate()`:
ℹ In argument: `bye bye = replace_na(`bye bye`, mean(`bye bye`, na.rm = T))`.
Caused by error in `vec_assign()`:
! Can't convert `replace` <double> to match type of `data` <labelled>.
Backtrace:
  1. df %>% ...
 10. tidyr:::replace_na.default(`bye bye`, mean(`bye bye`, na.rm = T))
 11. vctrs::vec_assign(data, missing, replace, x_arg = "data", value_arg = "replace")
Error in mutate(., `hi hi` = paste0(`hi hi`, "people"), `bye bye` = replace_na(`bye bye`, :

Caused by error in `vec_assign()`:
! Can't convert `replace` <double> to match type of `data` <labelled>.
r dplyr label tidyr hmisc
1个回答
0
投票

类型好像和

replace_na
冲突;这里
bye bye
可能需要是数字:

library(dplyr)

df |>
  mutate(`hi hi` = paste0(`hi hi`, "people"),
         `bye bye` = as.numeric(`bye bye`),
         `bye bye` = replace_na(`bye bye`, mean(`bye bye`, na.rm = T)))

但是您也可以考虑采用

base
方式:

is.na(df$`bye bye`) <- mean(df$`bye bye`, na.rm = TRUE)

输出:

    hi hi bye bye
1 Apeople       1
2 Bpeople       2
3 Cpeople       3
4 Dpeople       4
5 Epeople       5
© www.soinside.com 2019 - 2024. All rights reserved.