Создать функцию для преобразования коэффициента в строку, используя вектор индекса столбца - PullRequest
1 голос
/ 15 января 2020

Я хотел бы преобразовать количество столбцов в моем df из фактора в символ. Я написал код для этого следующим образом:

ColumnsToStrings <- c(2,5,6,25)

  for (column in ColumnsToStrings){
    df[column] <- lapply(df[column], as.character)

  }

Я хотел бы повторно использовать этот код, поэтому я попытался преобразовать его в функцию, которая принимает два аргумента. DF и вектор столбцов, которые вы хотите преобразовать:

ConvertColumnToString <- function (df, VectorOfColumns) {

  for (column in VectorOfColumns){
    df[column] <- lapply(df[column], as.character)

  }
}

, и я называю это следующим образом:

ColumnsToStrings <- c(2,5,6,25)    
df <- ConvertColumnToString(df,ColumnsToStrings)

Однако, когда я вызываю эту функцию, все значения в df удалить

1 Ответ

0 голосов
/ 15 января 2020

Похоже, что l oop избыточен в вашей функции, просто выполните:

df <- mtcars[1:6]  # example, all numeric

ConvertColumnToString <- function(df, ColumnsToStrings) {
  df[ColumnsToStrings] <- lapply(df[ColumnsToStrings], as.character)
  return(df)
}

ColumnsToStrings <- c(2, 5, 6, 25)

res <- ConvertColumnToString(df, ColumnsToStrings)
sapply(res, class)
#       mpg         cyl        disp          hp        drat          wt 
# "numeric" "character"   "numeric"   "numeric" "character" "character" 

Редактировать: Ваша версия не работает, потому что она ничего не вернул и перезаписал ваши данные ни с чем :), вы просто добавили бы return, чтобы заставить его работать:

ConvertColumnToString <- function (df, VectorOfColumns) {
  for (column in VectorOfColumns ) {
    df[column] <- lapply(df[column], as.character)
  }
  return(df)
}
res2 <- ConvertColumnToStringV1(df, ColumnsToStrings)
sapply(res2, class)
#       mpg         cyl        disp          hp        drat          wt 
# "numeric" "character"   "numeric"   "numeric" "character" "character" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...