2014-10-18 3 views
0

안녕하세요. 데이터 프레임 df가 있고 한 개의 이름 열에 palindromes가 있는지 확인하고 싶습니다. 12 개의 레코드가있는 테스트 데이터가 있습니다. 나는 이름에 대한 열 기록 중 2 개는 회문이 있다는 것을 알고있다. 아래 코드는 true false 값의 lapply를 사용하여 목록을 반환합니다.r에 palindrome 함수 만들기

진정한 가치가있는 회문 이름을 어떻게 반환합니까? 그리고 가장 자주 발생하는 회문 이름이 무엇인지 어떻게 알 수 있습니까?

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

+0

답변으로 문제가 해결되면 옆에있는 체크 표시를 클릭하여 동의하십시오 ... –