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

时间:2018-08-10 19:37:46

标签: r dataframe

我正在尝试编写一个函数,使我可以将数据框中某些字段的大小写更改为小写。我正在尝试通过使用功能,for和tolower命令来执行此操作,但是我没有任何运气。我对R还是很陌生,所以我可能缺少明显的东西。任何人都能提供的帮助,我将不胜感激。

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

我正在使用df引用我的主数据帧,而objs将是一个字符向量,其中包含我想转换为小写字母的数据帧中字段的名称。

1 个答案:

答案 0 :(得分:0)

我们可以如下使用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 

或者这是使用lapply的基本R解决方案。

dat[obj] <- lapply(dat[obj], tolower)
dat
# # 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