2017-10-02 11 views
2

다음과 같은 문제가 있습니다. CSV에서 데이터를 가져옵니다. 가져온 CSV는 K 1 000 M을 표시이목록별로 하위 집합을 지정하고 "NA"값을 인식하지 않습니다.

df <- data.frame(x=c(1,2,3,4,5), y=c("K","M",NA,NA,"K")) 

과 같은 1 000 000 나는 K와 M을 부분 집합의 값을 곱 목록을 사용하도록 나는 dplyr에 새 열을 만들고 싶습니다 X 열 그래서 dplyr 사용

sul <- c("K"=1000, "M"=1000000, "NA"=1) 

:

df %>% mutate(result=x * sul[y]) 

내 문제는 그 sul[y]에서 인식되지 않는를 CSV에서 데이터를 가져 오는 결과 발생하지만 내가 얻을 중 NA를 또는 NULL입니다. 이 문제를 우아한 방법으로 해결하는 방법에 대해 생각해 보셨습니까?

df$y[is.na(df&y)]<-1

고마워 : 다음 실행하는 더 좋은 방법이 있나요!

p.s. for-loop 대신 목록에 의한 부분 집합을 선택하여 데이터 처리 속도를 향상시킵니다. 다음 '기타'와 가진 NA을 대체 할

답변

1

sul에서

sul <- c(K=1000, M=1000000, Other=1) 
df %>% 
    mutate(y1 = replace(as.character(y), is.na(y), "Other"), 
      result = x*sul[y1]) %>% 
    select(-y1) 
# x y result 
#1 1 K 1000 
#2 2 M 2000000 
#3 3 <NA>  3 
#4 4 <NA>  4 
#5 5 K 5000 

'NA'

이 문자열이 아닌 실제 NA이다 할 더 좋을 수 있습니다. 우리는 "NA"

df %>% 
     mutate(result = x*sul[replace(as.character(y), is.na(y), "NA")]) 
+1

덕분에 영업 이익의 게시물에 'Y'에서, replace 'NA'에서 '술'을 사용하는 경우에 따라서, 그 괜찮 았는데! –