如何在R

时间:2016-11-13 22:16:45

标签: r regex

我正在尝试编写一个以字符串作为参数的函数,并在Pig Latin中打印字符串。 (在PigLatin中,你将单词的第一个字母移到最后,然后添加" ay"。例如,"这很有趣" - >" histay asway unfay& #34;。)我刚开始在R,所以我设法做的就是

function(x){

    x<-c() str_sub(x, 2, -1) 

....
 }

但我真的不知道如何将第一个字母移到单词的末尾并添加一个。任何提示将不胜感激!

3 个答案:

答案 0 :(得分:2)

使用基本R函数的一种方法可以是使用strsplitpaste的组合。我们可以创建一个对单个单词起作用的函数

f_one = function(word){
  letters = strsplit(word,"")[[1]]
  paste(c(letters[-1],letters[1],"ay"),collapse = "")
}

f_one("this")
## [1] "histay"

将其拆分为单个字母,然后使用粘贴将第一个字母粘贴到最后,然后添加&#34; ay&#34;。

然后我们可以使用第二个函数作用于多个单词的字符串,将字符串拆分为单个单词,将函数应用于每个单词并将结果粘贴在一起

f_multiple= function(words){
  individual = strsplit(words," ")[[1]]
  paste(sapply(individual,f_one), collapse = " ")
}

f_multiple("this was fun")
## [1] "histay asway unfay"

使用与第一个函数相同的逻辑,但在空格上分割以给出单独的单词。

答案 1 :(得分:2)

使用正则表达式:

pl = function(x) {
  x = unlist(strsplit(x, split=" "))
  paste(gsub("(.)(.*)", "\\2\\1ay", x), collapse=" ")
}

pl = Vectorize(pl)

a = c("this was fun", "What is this in pig Latin")

pl(a)
        this was fun               What is this in pig Latin 
"histay asway unfay" "hatWay siay histay niay igpay atinLay"

答案 2 :(得分:0)

执行此操作的一种方法是使用paste0加入三个字符串:

#The first character of string x
substr(x,1,1)

#All characters of x except the first
substr(x,2,nchar(a))

# And the string "ay"

pig_latin_x = paste0(substr(x,2,nchar(a)), substr(x,1,1), "ay")

这适用于单个单词,而不是短语。对于一个短语,首先将它们与strsplit分开。 jamieRowen的答案向您展示了如何实现这一目标。