Передача и ссылка на имя столбца в функции - PullRequest
1 голос
/ 08 октября 2019

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

Fix_Entries <- function(Column){
  df$Column[which(df$Column == "-")] <- "Y"
}

Однако я продолжаю получать ошибки и не могу найти какую-либо ссылку, чтобы помочь мне решить эту проблему!

Error in `$<-.data.frame`(`*tmp*`, Column, value = character(0)) : 
  replacement has 0 rows, data has 8460

1 Ответ

1 голос
/ 08 октября 2019

Если мы Column в качестве строки, то используем [[ и также возвращаем набор данных. Также может быть лучше иметь идентификатор набора данных в качестве другого аргумента

Fix_Entries <- function(df, Column){
   df[[Column]][which(df[[Column]] == "-")] <- "Y"
   df
}

df1 <- Fix_Entries(df1, "Col1")
df1
#   Col1       Col2
#1     N  2.2088619
#2 Hello  1.9015173
#3     A -0.0708413
#4     B -0.2253454
#5     Y -0.2403291
#6     C  0.8615449
#7     Y -0.5985272

Этого также можно добиться с помощью tidyverse, взяв имя столбца без кавычек в качестве ввода

Fix_Entries_tidy <- function(df, Column) {
       Column <- enquo(Column)
       df  %>%
           mutate(!! Column :=  replace(!! Column, !!Column == "-", "Y"))
}
Fix_Entries_tidy(df1, Col1)
#  Col1       Col2
#1     N  2.2088619
#2 Hello  1.9015173
#3     A -0.0708413
#4     B -0.2253454
#5     Y -0.2403291
#6     C  0.8615449
#7     Y -0.5985272

данные

set.seed(24)
df1 <- data.frame(Col1 = c("N", "Hello", "A", "B", "-", "C", "-"),
       Col2 = rnorm(7), stringsAsFactors = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...