我在所有字符类型字段的数据表上使用tolower()。当使用不同的语法应用于列时,我会得到不同的结果,这是正常的吗?
tolower(tmp_dt[,1:5])
"c(\"case\", \"student\", \"of\", \"case\", \"case\", \"week\", \"of\")\
tolower(tmp_dt[,2])
"case" "student" "of" "case" "case" "week" "of"
答案 0 :(得分:1)
我们需要在tolower
上应用vector
。根据{{1}}
x - 字符向量,或可以强制转换为字符的对象 by as.character。
如果我们检查?tolower
,则会调用tolower
,as.character
需要as.character
输入
vector
如果我们检查as.character(tmp_dt[1:2])
#[1] "c(\"Student\", \"Case\", \"OF\", \"OF\", \"OF\")"
#[2] "c(\"week\", \"Student\", \"week\", \"week\", \"Student\")"
此外,对于as.character,默认方法调用as.vector,所以 dispatch首先是as.character的方法,然后是for方法 as.vector。
一种方法是使用?as.character
遍历data.frame的列,应用lapply
并将输出分配回data.frame列
tolower
如果这是tmp_dt[, 1:5] <- lapply(tmp_dt[,1:5], tolower)
tmp_dt
# V1 V2 V3 V4 V5 V6
#1 student week of week case OF
#2 case student student case of Case
#3 of week of case of OF
#4 of week of of case OF
#5 of student student case case Case
,那么我们可以
data.table
library(data.table)
setDT(tmp_dt)[, (1:5) := lapply(.SD, tolower), .SDcols = 1:5]