【问题标题】:Writing a Function to Change Certain Columns to Lowercase编写函数将某些列更改为小写
【发布时间】:2018-08-11 03:52:59
【问题描述】:

我正在尝试编写一个函数,允许我将数据框中某些字段的大小写更改为小写。我试图通过使用函数、for 和 tolow 命令来做到这一点,但我没有任何运气。我对 R 还是很陌生,所以我可能会遗漏一些明显的东西。任何人都可以提供任何帮助,我将不胜感激。

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

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

【问题讨论】:

  • 您在函数内更改 data.frame 的任何值在函数外都将不可见。 (R 更像是按值传递而不是按引用传递)。您需要返回更新后的 data.frame 并重新分配给相同的变量或新变量。请参阅stackoverflow.com/questions/3969852/…(但忽略“分配”选项 - 这是糟糕的 R 风格)。

标签: r dataframe


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-12-24
    • 2017-09-15
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 2021-10-08
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多