Редактирование набора данных с использованием пользовательских функций - PullRequest
0 голосов
/ 31 января 2020

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

Сначала я хотел бы внести некоторые изменения в столбец Num на основе критериев в столбце «Активность». Затем я хотел бы создать новый столбец с именем Freq, который назначает значения на основе критериев в моем столбце Num.

Мой текущий код, кажется, не вносит желаемых изменений в мой столбец Num, но применяет изменение к моему новому столбцу Freq. Например, моя функция указывает на применение 0, если Activity == «Нет». Хотя это изменение не было сделано, когда я запускаю код, мой столбец Freq, кажется, распознает внесенное изменение и применяет правильное значение. Кроме того, «Часто» отображается в моей колонке Freq, где Num - это NA.

Я уверен, что с моей функцией что-то не так. Любая помощь будет отличной!

library(tidyverse)

Activity <- c(rep("NA", 5), rep("No Answer", 5), rep("No", 5), rep("Don't Know", 5), rep("Yes",5))
Num <- c(rep("NA", 5), rep("0", 5), rep("NA", 5), rep("0", 5), 1,2,3,4,5)
data <- data.frame(Activity, Num)


freq_func <- function(Activity, Num) {
  Num <- as.numeric(Num)
  Num <- ifelse(Activity == "No Answer", NA, 
           ifelse(Activity == "No", 0, 
           ifelse(Activity == "Don't Know", NA, Num)))
  ifelse(Num == 0, "None",
         ifelse(Num > 0 & Num < 5, "Rarely", 
         ifelse(Num > 4 & Num <60, "Frequently", 
         ifelse(Num > 60, "Almost Always", NA))))
}

test <- data %>% 
  mutate(Freq = freq_func(Activity, Num))

1 Ответ

1 голос
/ 31 января 2020

Это сработало с учетом комментария @ akrun

library(tidyverse)

Activity <- c(rep("NA", 5), rep("No Answer", 5), rep("No", 5), rep("Don't Know", 5), rep("Yes",5))
Num <- c(rep("NA", 5), rep("0", 5), rep("NA", 5), rep("0", 5), 1,2,3,4,5)
data <- data.frame(Activity, Num)


col_edit <- function(Activity, Num) {
  Num <- as.numeric(as.character(Num))
  ifelse(Activity == "No Answer", NA,
  ifelse(Activity == "No", 0,
  ifelse(Activity == "Don't Know", NA, Activity)))
}


freq_func <- function(Num) {
  ifelse(Num == 0, "None",
         ifelse(Num > 0 & Num < 5, "Rarely", 
         ifelse(Num > 4 & Num <60, "Frequently", 
         ifelse(Num > 60, "Almost Always", NA))))
}

test <- data %>% 
  mutate(Num = col_edit(Activity, Num)) %>% 
  mutate(Freq = freq_func(Num))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...