>source

열의 결 측값을 중앙값으로 바꾸는 함수를 작성하려고하는데 이는 요인/문자 및 숫자 값 모두에 대해 작동합니다.

library(dplyr)
test = data.frame(a=1:6,b=c("a","b",NA,NA,NA,"c"),c=c(1,1,1,1,2,NA),d=c("a","a","c",NA,NA,"b"))
fun_rep_na = function(df){
  for(i in colnames(df)){
    j<-sym(i)
    df = df %>% mutate(!!j=if_else(is.na(!!j),median(!!j, na.rm=TRUE),!!j))
  }
}

tidyr에는 replace_na라는 함수가 있지만 이것을 어떻게 사용하는지 잘 모르겠습니다. 어쨌든, 맞춤 기능은 내가 원하는 것입니다.

위의 코드는 오류가 있습니다.

  • 답변 # 1

    mutate_if 를 사용할 수 있습니다   median 와 함께   median 로   numeric 에서만 작동  열

    test %>% 
       mutate_if(is.numeric, list(~ replace(., is.na(.), median(., na.rm = TRUE))))
    
    

    <시간>

    가장 반복되는 값을 원하면 Mode 가 필요할 수 있습니다.

    Mode <- function(x) {
      x <- x[!is.na(x)]
      ux <- unique(x)
      ux[which.max(tabulate(match(x, ux)))]
    }
    
    

    와이즈 비즈  기능이 여기에서 처음 업데이트되었습니다

    Mode
    
    

  • 답변 # 2

    당신이 test %>% mutate_all(list(~ replace(., is.na(.), Mode(.)))) # a b c d #1 1 a 1 a #2 2 b 1 a #3 3 a 1 c #4 4 a 1 a #5 5 a 2 a #6 6 c 1 b 를 찾고 있다고 생각합니다  중간이 아님

    Mode 를 복용  여기에서 기능

    Mode
    
    

    Mode <- function(x) { ux <- unique(x) ux[which.max(tabulate(match(x, ux)))] } library(dplyr) test %>% mutate_all(~replace(., is.na(.), Mode(na.omit(.)))) # a b c d #1 1 a 1 a #2 2 b 1 a #3 3 a 1 c #4 4 a 1 a #5 5 a 2 a #6 6 c 1 b

관련 자료

  • 이전 c# - xamarin android - 메모리에있는 모든 프로세스 가져 오기
  • 다음 qt - scrollview + textarea가있는 사용자 지정 qml 구성 요소 - textarea가 올바르게 스크롤 가능하지 않음