问题描述
我试图将列表中某个df的某些df列的数据类(从字符转换为数字);但是,当我运行下一个代码时,会出现警告,并且数据类保持不变。
## inspecting class ##
class(df_list[["df"]][["col1"]])
//console output //
"character"
## function to return numeric ##
num_fun <- function(x){
if(is.na(x)){
return(NA)
} else {
as.numeric(x)
}
}
numeric_columns <- c("col1","col2","col3")
# loop to convert character columns ##
for(i in seq_along(numeric_columns)){
df_list[["df"]][,i] <- lapply(
df_list[["df"]][,i],num_fun)
}
// console output //
Warning messages:
1: In `[<-.data.frame`(`*tmP*`,i,value = list(8,8,... :
provided 1203 variables to replace 1 variables
2: In FUN(X[[i]],...) : NAs introducidos por coerción
## verify ##
class(df_list[["df"]][["col1"]])
// console output //
"character"
反正有在特定的df列列表上应用此功能吗?
解决方法
尝试以下方法:
df_list[["df"]][numeric_columns] <- lapply(df_list[["df"]][numeric_columns],as.numeric)
这会将numeric_columns
中df_list[["df"]]
中的列转换为数字。 NA
将自动保留为NA
。
我们可以使用tidyverse
方法来做到这一点。提取list
元素,在numeric_columns
中指定across
的向量,然后转换为numeric
library(dplyr)
library(purrr)
df_list[["df"]] <- df_list[["df"]] %>%
mutate(across(numeric_columns),as.numeric))
或使用base R
Map(as.numeric,df_list[["df]][numeric_columns])