2014-10-18 96 views
0

嗨,我有一个数据框df,并希望查明是否有任何一个名称列中的回文。 我有测试数据,其中有12条记录。我知道列名记录中有2个是回文。 下面的代码将使用真正的假值返回一个列表。在r中创建回文函数

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

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 

回答

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" 

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

+0

谢谢你的工作! – oldtimetrad 2014-10-18 15:57:02

+0

如果答案解决了您的问题,欢迎您点击旁边的复选标记以接受它... – 2014-10-18 16:30:09