2016-12-16 4 views
1

, когда я пытаюсь применить sapply несильно к data.frame, он не работает, и я получаю эту ошибку:R сценарий - NCHAR функция (х) не работает в sapply

«Ошибка в NCHAR (х): 'NCHAR()' требует вектор символов»

sapply несильно является:

as.data.frame(sapply(df,function(x) nchar(x))) 

мой test.data кадр:

df<-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1")) 

Я не понимаю, почему я получаю эту ошибку, потому что я propperly отформатированный мой кадр данных следующим образом

df <- as.data.frame(sapply(df,as.character)) 

, что я хотел бы в итоге будет новый data.frame были каждый элемент является число символов каждый элемент в более раннем файле данных. В моем примере test.frame это будет:

valor1   valor2  valor3 
[1]12    9    4 
[2]11    9    4 
[3]11    9    1 

ответ

0

Ну, ответ лежит на предупреждении об ошибке. nchar требует символьный вектор, который sapply здесь не укажет (при отладке вывод sapply является «фактором», а не «символом»). Вы должны использовать apply вместо:

ncharsap <- function() { 
    df1 <-data.frame(valor1=c("R$ 27.144,22"," 30.035,07 "," 30.761,40 "),valor2=c("17.935,85","13.741,63","19.090,80"),valor3=c("0,00","0,00","1")) 
    df1 <- as.data.frame(sapply(df1,as.character)) 
    df2 <- t(as.data.frame(apply(df1,1, function(x) nchar(x)))) 
    return(df2) 
} 

Примечание: Не рекомендуется использовать встроенные имена функций для именования пользовательских объектов. Поэтому я изменил df на df1. А также вывод требует транспонирования на t для подтверждения с требуемым выходом.

Смежные вопросы