您好我有一个数据框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
答案 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"
我不确定你的第三栏是什么意思,所以我忽略了它。