2017-10-04 46 views
1

바보 같은 질문 일 수 있습니다. 여러 조건이있는 tibble에서 여러 변수를 다시 코딩하고 싶습니다. 값이 경우 :R에서 tidyverse를 사용하여 여러 변수 레코딩

데이터 예 : 동일한

# A tibble: 5 x 4 
    V1 V2 V3 V4 
    <int> <int> <int> <int> 
1 11  2  5 14 
2  5  4 15  5 
3 13 15  2  5 
4  7 13 15 11 
5 11  5 12  3 

나는이 조건 V1, V2, V3를 코딩 할, 그리고 떠나 V4 :

library(tidyverse) 
s <- matrix(sample(1:15, 20, replace = TRUE), ncol = 4) 
s <- as_tibble(s) 

같은 것을 준다 5보다 작거나 같음 값이 5보다 크지 만 10보다 작거나 같으면 1을 얻고, 값이 10보다 크면 마지막으로 값을 얻습니다.

출력은 다음과 같아야합니다. 확인이 같은 :

# A tibble: 5 x 4 
     V1 V2 V3 V4 
     <int> <int> <int> <int> 
    1 3  1  1  14 
    2 1  1  3  5 
    3 3  3  1  5 
    4 2  3  3  11 
    5 3  1  3  3 

내가 알고에 대한 sapply, vapply,하지만 난 tidyverse 패키지에서 우아한 방법으로 함수를 사용하여 코딩하고 싶습니다 적용됩니다.

미리 감사드립니다.

+0

는 dplyr에서 mutate_at' '를 살펴 보자. 원하는대로 선택할 수있는 여러 열에 동일한 기능을 적용하도록 설계되었습니다. – MrFlick

답변

5

@MrFlick 주석에 대해 자세히 설명하려면 mutate_at을 dplyr의 case_when 함수와 함께 사용할 수 있습니다. 그 결과는 다음과 같습니다

s %>% 
    mutate_at(vars(V1:V3), 
      function(x) case_when(x <= 5 ~ 1, x <= 10 ~ 2, TRUE ~ 3)) 

이 당신에게 줄 것이다 :

# A tibble: 5 x 4 
    V1 V2 V3 V4 
    <dbl> <dbl> <dbl> <int> 
1  3  1  3  6 
2  2  1  1  8 
3  2  3  1 14 
4  1  3  3 15 
5  1  2  3  7 
+0

V4 컬럼에는 오타가 있지만 작동합니다 !!! mutate_at 함수를 소개해 주셔서 고맙습니다 !!! –

+1

오타가 어디 있습니까? 숫자가 다른 것을 말하는 겁니까? 그렇다면'sample '이 나를 위해 매트릭스를 만들 때 다른 숫자를 사용했다는 것을 알았습니다. – tbradley

+1

나는 단지 깨달았다! !! 그것은 잘 작동합니다! –