Обновление определенных значений столбца в пользовательской функции в R - PullRequest
1 голос
/ 15 апреля 2020

У меня есть следующий фрагмент кода для обновления столбца в кадре данных в R с медианным значением. Это прекрасно работает, но я хотел бы иметь возможность вызывать это как функцию из других частей программы, передавая другие кадры данных и столбцы.

medianVal <- median(df$column, na.rm = T)
df$column[is.na(df$column)] <- medianVal

Лог c для кода, который я Попытка использовать это Передача через DataFrame и Столбец, Получить среднее значение, Обновить и вернуть dataframe

updateWithMedian <- function(DataFrame, Column)
{
  medianValue <- median(Column, na.rm = T)
  Column[is.na(DataFrame$Column)] <- medianValue
  return(DataFrame)
}

DataFrame [[Column]] в функции помогает мне определить столбец, но я все еще пытаюсь обновить значения NA до медианы.

Например, код

DataFrame[[Column]][is.na(DataFrame$Column)] <- medianValue

не похож на правильный синтаксис.

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Мы также можем сделать

library(dplyr)
library(zoo)
updateWithMedian <- function(df, colname) {
       df %>%
           mutate_at(vars(colname), na.aggregate, FUN = median)
 }

updateWithMedian(df, "column") 
1 голос
/ 15 апреля 2020

Вы смешиваете записи здесь. Если вы используете имена столбцов в кавычках, вы не можете использовать нотацию типа dataframe$variable. Попробуйте это (непроверенное) решение:

updateWithMedian <- function(df, colname)
{
  medianValue <- median(df[,colname], na.rm = T)
  df[is.na(df[,colname]), colname] <- medianValue
  return(df)
}
0 голосов
/ 15 апреля 2020

Спасибо, это сработало отлично. Просто ответ на вопрос: если бы я хотел обновить значение столбца значением другого столбца в том же кадре данных, какой будет правильный шаг для него?

Я пробовал приведенный ниже код, но этот заменяет NA в Col1 на имя Col2, но его значение мне нужно.

updateWithMedian <- function(df, colname1, colname2)
{

  df[is.na(df[,colname1]), colname1] <- colname2
  return(df)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...