首页 > 解决方案 > 如何更有效地大写列名?

问题描述

我想在 data.frame 的列名中大写某些单词(“for”、“in”、“and”、“of”)。我目前的方法既费力又低效。任何改进它的帮助。

示例数据集(我的更长)

a <- runif(10, 0,100)
b <- runif(10, 0,100)
c <- runif(10, 0,100)
d <- runif(10, 0,100)

df <- cbind(a,b,c,d)
colnames(df) <- c("NamesofPeople", "HereandThere", "AllforOne", "LetMein")

当前方法

colnames(df) <- str_replace_all(colnames(filename), "NamesofPeople", "NamesOfPeople")
colnames(df) <- str_replace_all(colnames(filename), "HereandThere", "HereAndThere")
colnames(df) <- str_replace_all(colnames(filename), "AllforOne", "AllForOne")
colnames(df) <- str_replace_all(colnames(filename), "LetMein", "LetMeIn")

警告

如果这些字母作为单词的一部分包含在其他列中,我需要小心,例如“of”也会出现在“software”中,并且将其大写会导致“sOftware”。

标签: rregexdataframecapitalization

解决方案


您可以尝试使用正则表达式:

colnames(df) <- str_replace_all(colnames(df), 
              pattern = c("of([A-Z]|$)" = "Of\\1", 
                          "and([A-Z]|$)" = "And\\1", 
                          "for([A-Z]|$)" = "For\\1",
                           "in([A-Z]|$)" = "In\\1")
                  )

在这里,我检查是否有任何关键字 (of, and, for, in) 在字符串的末尾 ( $) 或后跟大写字母 ( [A-Z])


推荐阅读