【发布时间】:2016-10-20 21:12:28
【问题描述】:
我有一个原子向量,例如:
col_names_to_be_changed <- c("PRODUCTIONDATE", "SPEEDRPM", "PERCENTLOADATCURRENTSPEED", sprintf("SENSOR%02d", 1:18))
我想在单词之间使用_,除了单词的第一个字母(在R Style for dataframes from advanced R 之后)之外,它们都小写。我想要这样的东西:
new_col_names <- c("Production_Date", "Percent_Load_At_Current_Speed", sprintf("Sensor_%02d", 1:18))
假设我的话仅限于这个列表:
list_of_words <- c('production', 'speed', 'percent', 'load', 'at', 'current', 'sensor')
我正在考虑一种算法,它使用gsub,将_ 从上面的列表中找到一个单词,然后将每个单词的第一个字母大写。虽然我可以手动执行此操作,但我想了解如何使用gsub 更精美地完成此操作。谢谢。
【问题讨论】:
-
你可能不想要
gsub。既然你有一个字典列表,你可能最好使用像regmatches这样的提取函数。但我有一种感觉,包 stringi(或其包装器 stringr)最适合这个,因为它对所有参数进行了矢量化。 -
你应该更加努力
gsub('(?<=^|_)([a-z])', '\\U\\1', gsub(sprintf('(?i)(?<=%s)(?=.{2,})', paste(list_of_words, collapse = '|')), '_', tolower(col_names_to_be_changed), perl = TRUE), perl = TRUE) -
@rawr 效果很好。你能把它变成一个解决方案,以便其他人将来可以使用它吗?第一个
gsub确实完成了gsub(sprintf('(?i)(?<=%s)(?=.{2,})', paste(list_of_words, collapse = '|')), '_', tolower(col_names_to_be_changed), perl = TRUE)的任务,然后另一个gsub将第一个字母大写。谢谢。 -
不适用于首字母缩略词(RPM 更改为 Rpm)并且没有“后跟至少两个字母”部分,它将在“日期”中拆分“at”(因为“at”在列表)所以这不是一个很好的解决方案
-
绝对够用了,比我希望的要好得多,不知道有没有其他办法不手动让它工作。