如何将环境中的每个数据对象的字符串都设为小写?或者列表中的每个元素

How do I make only the character strings lowercase for every data object in the environment? OR every element in a list

我有大量的数据框对象,我想应用一个函数,只将字符串转换为小写,而保留所有其他内容的 类。

我试过 mutate_all(df,tolower) 但影响了所有 variables/columns

我试过 mutate_at(names(select_if(df,is.character)),tolower) 并且这确实适用于单个数据框。但我需要同时跨多个数据帧执行此操作。我真的很不擅长迭代和循环,所以如果代码在每个对象上迭代这行代码可能是一个解决方案。

或者,因为我在列表中也有这些数据帧,所以我尝试了

modify_depth(df,.depth = 2, mutate_at(names(select_if(,is.character)),tolower)) 但这没有用。 modify 在 purrr 包中

library(dplyr)
library(purrr)

data_frame_Rate_Table <- data.frame(Policy_Class = c("rED", "WhIte","BlUe"),
                                   Rate=c(3,9,19),"Factor_1"= 1:3, Factor_2=7:9, stringsAsFactors = FALSE)

data_frame_Policyholders <- data.frame(Policy_number  = 1:10,
                                       Policy_Class=rep(c("REd","red","wHite","BLue","bluE"),2),
                                       Risk=c(rep("HiGh",5),rep("LOW",5)), 
                                       Lapse=rep(c("Y","N"),5), stringsAsFactors = FALSE)

data_frame_list <- list(data_frame_Policyholders, data_frame_Rate_Table)

我希望所有的字符串都小写而不影响其他 类。

"and over a list of dataframes map(data_frame_list, ~mutate_if(.x,is.character,tolower)) "– AndS。 7 分钟前

这是 AndS 的评论,这正是我想要发生的事情。谢谢安德!

我将此作为答案而不是评论。

您可以在基础 R 中使用 rapply

data_frame_list <- rapply(data_frame_list, function(x) 
  if(is.character(x)) tolower(x) else x, how="replace")
# [[1]]
#    Policy_number Policy_Class Risk Lapse
# 1              1          red high     y
# 2              2          red high     n
# 3              3        white high     y
# 4              4         blue high     n
# 5              5         blue high     y
# 6              6          red  low     n
# 7              7          red  low     y
# 8              8        white  low     n
# 9              9         blue  low     y
# 10            10         blue  low     n
# 
# [[2]]
#   Policy_Class Rate Factor_1 Factor_2
# 1          red    3        1        7
# 2        white    9        2        8
# 3         blue   19        3        9