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

时间:2017-01-04 06:11:11

标签: r string function

我有一个包含多个变量的数据框:

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

我想写一个能为我整理这些数据的函数,因为我的数据框中有很多变量,格式相似。我希望该函数根据字符串中出现的第一个字母替换每个元素。例如,如果字符串中出现的第一个字母是“h”,我希望整个字符串替换为“ha”,如果“l”则替换为“lima”,如果“a”则为“acre”,如果“c”则为“卡尼岛”。

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

list

答案 1 :(得分:1)

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

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"