微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环不适用于R中的字符列

如何解决循环不适用于R中的字符列

我试图将列表中某个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_columnsdf_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])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。