Замена NA со случайными десятичными знаками в определенном столбце в R - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь заменить NA s случайными десятичными знаками в определенном столбце в R. Однако R генерирует случайные десятичные дроби с той же конечной дробью и просто меняет часть перед десятичной. Ниже приведены методы, которые я попробовал:

df_LT$ATC[is.na(df_LT$ATC)]  <- sample(seq(10.2354897,23.78954214), size=sum(is.na(df_LT$ATC)), replace=T)

dplyr

df_LT <-  df_LT %>%mutate_at(vars(df_LT$ATC), ~replace_na(., sample(10.2354897:23.78954214, size=sum(is.na(ATC)), replace=T)))

Данные выглядят так, как показано ниже

    A        ATC
    1        11.2356879
    2        42.58974164
    3            NA
    4        34.25382343
    5             NA 

Теперь везде, где естьэто NA в столбце ATC. Я хочу добавить десятичную дробь, как и остальные, но в диапазоне 10:23. Надеюсь, это объяснение поможет. Я могу упустить что-то очень очевидное. Заранее спасибо за помощь.

1 Ответ

3 голосов
/ 30 октября 2019

Вы используете seq или оператор двоеточия : для создания своих выборок, что означает, что вы производите выборку из следующей последовательности:

seq(10.2354897, 23.78954214)
# [1] 10.23549 11.23549 12.23549 13.23549 14.23549 ....

Таким образом, начальное значение увеличивается на 1 на каждом шаге, оставляя цифры после запятой фиксированными.

Если вы хотите выбрать случайное число в диапазоне этих двух пределов, вы можете сделать:

runif(n = 1, min = 10.2354897, max = 23.78954214)

Так что для вашего примера это означает:

df_LT$ATC[is.na(df_LT$ATC)] <- 
  runif(n = sum(is.na(df_LT$ATC)), 10.2354897, 23.78954214)

Если вы хотите добавить условие, вы можете выполнить:

df_LT$ATC <- 
  ifelse(is.na(df_LT$ATC) & df_LT$A == 3, 
         runif(n = nrow(df_LT), 10.2354897, 23.78954214), 
         df_LT$ATC)

Это проверяет, отсутствует ли ATC, а также равно ли A 3. Если это выполняется, отсутствующее значение заменяется случайным числом, в противном случаевозвращается оригинальное значение (пропущено или нет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...