将数据框中除 xyz 之外的所有字符列小写
Lowercase all character columns except xyz in dataframe
foo()
将数据框的所有字符列小写 except=
,其名称由用户提供。
我想知道为什么当我提供 except="study"
时,foo
错误地将 data
中的列 study
小写了?
可重现的代码和所需的输出如下。
m="
study cap back
AA L 1
BB F 2
CC H 8"
data <- read.table(text=m,h=T)
foo <- function(X, except = NULL){
y <- sapply(setdiff(names(X), except), function(x) is.character(as.vector(X[[x]])))
X[y] <- lapply(X[y], tolower)
return(X)
}
#=== EXAMPLE OF USE:
foo(data, except = c("study"))
Desired_output=
"
study cap back
AA l 1
BB f 2
CC h 8"
这里有两种实现方式-
基础 R -
foo <- function(X, except = NULL){
y <- names(Filter(is.character, X[setdiff(names(X), except)]))
X[y] <- lapply(X[y], tolower)
return(X)
}
foo(data, except = c("study"))
# study cap back
#1 AA l 1
#2 BB f 2
#3 CC h 8
使用dplyr
-
library(dplyr)
foo <- function(X, except = NULL){
X %>%
mutate(across(where(is.character) &
all_of(setdiff(names(X), except)), tolower))
}
foo(data, except = c("study"))
foo()
将数据框的所有字符列小写 except=
,其名称由用户提供。
我想知道为什么当我提供 except="study"
时,foo
错误地将 data
中的列 study
小写了?
可重现的代码和所需的输出如下。
m="
study cap back
AA L 1
BB F 2
CC H 8"
data <- read.table(text=m,h=T)
foo <- function(X, except = NULL){
y <- sapply(setdiff(names(X), except), function(x) is.character(as.vector(X[[x]])))
X[y] <- lapply(X[y], tolower)
return(X)
}
#=== EXAMPLE OF USE:
foo(data, except = c("study"))
Desired_output=
"
study cap back
AA l 1
BB f 2
CC h 8"
这里有两种实现方式-
基础 R -
foo <- function(X, except = NULL){
y <- names(Filter(is.character, X[setdiff(names(X), except)]))
X[y] <- lapply(X[y], tolower)
return(X)
}
foo(data, except = c("study"))
# study cap back
#1 AA l 1
#2 BB f 2
#3 CC h 8
使用dplyr
-
library(dplyr)
foo <- function(X, except = NULL){
X %>%
mutate(across(where(is.character) &
all_of(setdiff(names(X), except)), tolower))
}
foo(data, except = c("study"))