R 编写函数将某些列更改为小写

R 编写函数将某些列更改为小写,r,dataframe,R,Dataframe,我正在尝试编写一个函数,它允许我将数据帧中某些字段的大小写改为小写。我试图通过使用函数、for和tolower命令来实现这一点,但我没有任何运气。我对R还是相当陌生,所以我可能遗漏了一些明显的东西。我将感谢任何人能提供的任何帮助 standardize_lowercase <- function(df, objs) { for(i in 1:length(objs)) { df[i] <- tolower(df[i]) } } standarize_lowercas

我正在尝试编写一个函数,它允许我将数据帧中某些字段的大小写改为小写。我试图通过使用函数、for和tolower命令来实现这一点,但我没有任何运气。我对R还是相当陌生,所以我可能遗漏了一些明显的东西。我将感谢任何人能提供的任何帮助

standardize_lowercase <- function(df, objs) {
  for(i in 1:length(objs)) {
    df[i] <- tolower(df[i])
  }
}

standarize_lowercase我们可以使用
dplyr
包,如下所示。以字符串形式提供列名,并将
tolower
提供给
mutate_at
函数

library(dplyr)

# Create example data frame
dat <- data_frame(A = c("A", "B", "C"),
                  B = c("A", "B", "C"),
                  C = c("A", "B", "C"),
                  D = c("A", "B", "C"),
                  E = c("A", "B", "C"))

# Assuming that we want to change the column B, C, E to lower case
obj <- c("B", "C", "E")

dat2 <- dat %>%
  mutate_at(vars(obj), funs(tolower(.)))
dat2
# # A tibble: 3 x 5
#   A     B     C     D     E    
#   <chr> <chr> <chr> <chr> <chr>
# 1 A     a     a     A     a    
# 2 B     b     b     B     b    
# 3 C     c     c     C     c 
下面是将第二个选项转换为函数的示例

dat_tolower <- function(data, target){
  data[target] <- lapply(data[target], tolower)
  return(data)
}

dat_tolower(dat, target = obj)
# # A tibble: 3 x 5
#   A     B     C     D     E    
#   <chr> <chr> <chr> <chr> <chr>
# 1 A     a     a     A     a    
# 2 B     b     b     B     b    
# 3 C     c     c     C     c 

dat\u降低函数内data.frame的任何更改值,函数外将看不到该值。(R的行为更像是通过值传递,而不是通过引用传递)。您需要返回更新后的data.frame并重新分配给同一变量或新变量。请参阅(但忽略“分配”选项-这是糟糕的R样式)。
dat_tolower <- function(data, target){
  data[target] <- lapply(data[target], tolower)
  return(data)
}

dat_tolower(dat, target = obj)
# # A tibble: 3 x 5
#   A     B     C     D     E    
#   <chr> <chr> <chr> <chr> <chr>
# 1 A     a     a     A     a    
# 2 B     b     b     B     b    
# 3 C     c     c     C     c