为什么数据表中tolower()的输出根据其应用方式而有所不同?

时间:2017-05-22 06:44:52

标签: r

我在所有字符类型字段的数据表上使用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"

1 个答案:

答案 0 :(得分:1)

我们需要在tolower上应用vector。根据{{​​1}}

中的描述
  

x - 字符向量,或可以强制转换为字符的对象   by as.character。

如果我们检查?tolower,则会调用toloweras.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]
相关问题