创建一个 "Capitalize" 函数来处理向量
Create a "Capitalize" function to work with vectors
这个问题是在对这个问题进行头脑风暴之后提出的 Capitalize the first letter of both words in a two word string
我想编写一个接受向量的函数,它将句子中的每个单词大写,并将单词的其余部分取消大写。仅首字母大写更容易:
CapitalizeFirstWord <- function(vector) {
s <- sapply(sapply(vector, substring, 1, 1), toupper)
t <- sapply(sapply(vector, substring, 2), tolower)
binded <- cbind(s,t)
apply(binded, 1, paste, collapse= "")
}
所以 CapitalizeFirstWord(c("heLlo", "ABC", "GooD daY"))
结果是
heLlo ABC GooD daY
"Hello" "Abc" "Good day"
( 在这个问题的帮助下写的 Paste multiple columns together )
但我无法让它工作,所以句子中的每个单词都大写。
这是我失败的尝试:
CapitalizeEveryWord <- function(vector) {
vectorS <- sapply(vector, strsplit, " ")
s <- sapply(sapply(vectorS, substring, 1, 1), toupper)
t <- sapply(sapply(vectorS, substring, 2), tolower)
binded <- cbind(s,t)
apply(binded, 1, paste, collapse= "")
}
所以 CapitalizeEveryWord(c("heLlo", "ABC", "GooD daY"))
结果是
heLlo ABC GooD daY
"Hello" "Abc" "c(\"G\", \"D\")c(\"ood\", \"ay\")"
我不知道如何更改 cbind()
或 paste()
函数的行为以使其重新正确排列。
我做这项工作是因为我有一个非常大的数据框,其中大部分字符串都大写。
脚本应该消耗尽可能少的时间(因为使用 for()
循环迭代,对于每一行并且只将第一个字母大写,非常慢,而且我在并行工作时遇到了问题parLapply()
)。这就是为什么我使用 *apply()
系列函数来创建一个新的更快的函数。
我们可以使用gsub
gsub("\b(.)", "\U\1", tolower(v1), perl=TRUE)
#[1] "Hello" "Abc" "Good Day"
如果只首字母大写
sub("(.)", "\U\1", tolower(v1), perl=TRUE)
#[1] "Hello" "Abc" "Good day"
数据
v1 <- c("heLlo", "ABC", "GooD daY")
使用来自 stringi
的这个确切用例的内置函数:
library(stringi)
v1 <- c("heLlo", "ABC", "GooD daY")
stri_trans_totitle(v1)
## [1] "Hello" "Abc" "Good Day"
这个问题是在对这个问题进行头脑风暴之后提出的 Capitalize the first letter of both words in a two word string
我想编写一个接受向量的函数,它将句子中的每个单词大写,并将单词的其余部分取消大写。仅首字母大写更容易:
CapitalizeFirstWord <- function(vector) {
s <- sapply(sapply(vector, substring, 1, 1), toupper)
t <- sapply(sapply(vector, substring, 2), tolower)
binded <- cbind(s,t)
apply(binded, 1, paste, collapse= "")
}
所以 CapitalizeFirstWord(c("heLlo", "ABC", "GooD daY"))
结果是
heLlo ABC GooD daY
"Hello" "Abc" "Good day"
( 在这个问题的帮助下写的 Paste multiple columns together )
但我无法让它工作,所以句子中的每个单词都大写。
这是我失败的尝试:
CapitalizeEveryWord <- function(vector) {
vectorS <- sapply(vector, strsplit, " ")
s <- sapply(sapply(vectorS, substring, 1, 1), toupper)
t <- sapply(sapply(vectorS, substring, 2), tolower)
binded <- cbind(s,t)
apply(binded, 1, paste, collapse= "")
}
所以 CapitalizeEveryWord(c("heLlo", "ABC", "GooD daY"))
结果是
heLlo ABC GooD daY
"Hello" "Abc" "c(\"G\", \"D\")c(\"ood\", \"ay\")"
我不知道如何更改 cbind()
或 paste()
函数的行为以使其重新正确排列。
我做这项工作是因为我有一个非常大的数据框,其中大部分字符串都大写。
脚本应该消耗尽可能少的时间(因为使用 for()
循环迭代,对于每一行并且只将第一个字母大写,非常慢,而且我在并行工作时遇到了问题parLapply()
)。这就是为什么我使用 *apply()
系列函数来创建一个新的更快的函数。
我们可以使用gsub
gsub("\b(.)", "\U\1", tolower(v1), perl=TRUE)
#[1] "Hello" "Abc" "Good Day"
如果只首字母大写
sub("(.)", "\U\1", tolower(v1), perl=TRUE)
#[1] "Hello" "Abc" "Good day"
数据
v1 <- c("heLlo", "ABC", "GooD daY")
使用来自 stringi
的这个确切用例的内置函数:
library(stringi)
v1 <- c("heLlo", "ABC", "GooD daY")
stri_trans_totitle(v1)
## [1] "Hello" "Abc" "Good Day"