在 R 中编写一个函数,该函数根据字母的第一个实例选择 a 字符串并替换字符串



我有一个数据框,其中包含几个变量,如下所示:

land_unit<-c("0.5ha", "hactares", "ha", "ha", "acre", "3ha", 
              "lima", "limas", "acre", "cunny", "6 cunnies")

我想编写一个函数来整理这些数据,因为我的数据框中有许多具有类似格式的变量。我希望该函数根据字符串中出现的第一个字母替换每个元素。例如,如果字符串中出现的第一个字母是"h",我希望整个字符串替换为"ha",如果"l"则替换为"lima",如果"a"则为"acre",如果"c"则替换为"kani"。

我已经对此进行了广泛的搜索,但找不到答案,但是我知道必须有一个相对简单的解决方案。也许使用正则表达式?

任何帮助将不胜感激。

根据描述,这可能会有所帮助。 我们使用gsubfn来匹配字符串^开头的零个或多个不是字母([^A-Za-z]*)的字符,后跟一个捕获为组的单个字母(([a-z])),后跟其他字符(.*),并将捕获组替换为命名键/值list

library(gsubfn)
gsubfn("^[^A-Za-z]*([a-z]).*", list(h = "ha", l="lima", a = "acre", c = "kani"), land_unit)
#[1] "ha"   "ha"   "ha"   "ha"   "acre" "ha"   "lima" "lima" "acre" "kani" "kani"

这也应该有效(使查找表硬编码并将数据与代码分离):

land_unit<-c("0.5ha", "hactares", "ha", "ha", "acre", "3ha", 
             "lima", "limas", "acre", "cunny", "6 cunnies")
library(stringr)
# define a lookup table, decouple the data
lookup_table <- data.frame(first.letter=c('h', 'l', 'a', 'c'), 
                           replace.str=c('ha', 'lima', 'acre', 'kani'), 
                           stringsAsFactors = FALSE) 
# extract the matches
matches <- match(str_match(land_unit, "[^[:alpha:]]*([:alpha:]).*")[,2] , lookup_table[,1]) 
# replace from lookup table
ifelse(!is.na(matches), lookup_table[matches,2], land_unit) 
# [1] "ha"   "ha"   "ha"   "ha"   "acre" "ha"   "lima" "lima" "acre" "kani" "kani"

相关内容

最新更新