在r中创建回文函数

时间:2014-10-18 15:22:33

标签: r

您好我有一个数据框df,并希望找出一个名称列中是否有任何回文。 我有测试数据,里面有12条记录。我知道名称中的2个列记录是回文。 下面的代码将使用true false值的lapply返回一个列表。

如何返回具有真值的回文名称,以及如何找出最常出现的回文名称?

is_palindrome = function(x){
  charsplit = strsplit(x, "")[[1]]
  revchar = rev(charsplit)

  all(charsplit==revchar)
}

dfnamelc = tolower(as.character(df$Name))
listtest = as.list(dfnamelc)
lapply(listtest,is_palindrome)


example df
Linda,F,100
Mary,F,150
Patrick,M,200
Barbara,F,300
Susan,F,100
Norman,M,40
Deborah,F,500
Sandra,F,23
Conor,M,80
anna,F,40
Otto,M,30
anna,M,40

1 个答案:

答案 0 :(得分:3)

使用sapply()将结果作为向量返回可能会更方便,并将结果合并回数据框。

 df <- transform(df,
         is_pal=sapply(tolower(Name),is_palindrome))
 df$Name[df$is_pal]   ## which names are palindromes?
 paltab <- table(df$Name[df$is_pal])   ## count palindromic names
 names(paltab)[which.max(paltab)]  ## "anna"

我不确定你的第三栏是什么意思,所以我忽略了它。