>source

그룹의 첫 번째 값 (한 변수의)과 같은 그룹의 다른 모든 값 (같은 변수의) 사이의 백분율 변화를 얻으려고합니다.

데이터 예 :

df = data.frame(group = c(rep('A',4), rep('B',3)),
            response = c(1,4,2,1,1,2,3),
            treatment = c("control","100mg","200mg","50mg","control","100mg","200mg"))
> df
    group response treatment
       A     1   control
       A     4     100mg
       A     2     200mg
       A     1      50mg
       B     1   control
       B     2     100mg
       B     3     200mg

다시 말해, 나는 백분율 변화를 얻고 싶습니다 동일한 그룹에서 다른 모든치료레벨에 대한치료'통제'에 대한응답.치료레벨의 수는 그룹별로 다를 수 있습니다.

지금까지 가지고있는 것 :

# function for % change
pct <- function(x) {(x/lag(x)-1)*100}
library(dplyr)
# group data and apply function
percChange <- df %>% 
  group_by(group) %>% 
  mutate_at(vars(response), funs(pct))
# the output (perChange) is:
#   group response treatment
# 1 A        NA   control  
# 2 A       300   100mg    
# 3 A       -50   200mg    
# 4 A       -50   50mg     
# 5 B        NA   control  
# 6 B       100   100mg    
# 7 B        50   200mg

하지만 원하는 결과는 다음과 같습니다.

# group  response  treatment
# 1 A        NA   control  
# 2 A       300   100mg    
# 3 A       100   200mg    
# 4 A       0     50mg     
# 5 B       NA    control  
# 6 B       100   100mg    
# 7 B       200   200mg

나는 모든 곳을 보았고 비슷한 것들을 발견했지만 내가 추구하는 것은 없습니다. 감사.


  • 답변 # 1

    first() 를 사용하고 싶습니다 :

    library(tidyverse)
    df = data.frame(
      group = c(rep('A',4), rep('B',3)),
      response = c(1,4,2,1,1,2,3),
      treatment = c("control","100mg","200mg","50mg","control","100mg","200mg")
    )
    df %>%
      group_by(group) %>%
      mutate(
        resp_pct_chg_from_first = (response / first(response) - 1) * 100
      )
    #> # A tibble: 7 x 4
    #> # Groups:   group [2]
    #>   group response treatment resp_pct_chg_from_first
    #>   <fct>    <dbl> <fct>                       <dbl>
    #> 1 A            1 control                         0
    #> 2 A            4 100mg                         300
    #> 3 A            2 200mg                         100
    #> 4 A            1 50mg                            0
    #> 5 B            1 control                         0
    #> 6 B            2 100mg                         100
    #> 7 B            3 200mg                         200
    
    

    2019-03-20에 reprex 패키지 (v0.2.1)에서 생성

  • 답변 # 2

    JasonAizkalns가 잘 대답했지만 pct 를 유지하려는 경우를 대비하여  기능. pct 에서 작은 오류를 수정하십시오.  기능을 작동시킵니다.

    pct <- function(x) {
      ((x-x[1])/x[1]) * 100
    }
    > percChange
    # A tibble: 7 x 3
    # Groups:   group [2]
      group response treatment
      <fct>    <dbl> <fct>    
    1 A            0 control  
    2 A          300 100mg    
    3 A          100 200mg    
    4 A            0 50mg     
    5 B            0 control  
    6 B          100 100mg    
    7 B          200 200mg   
    
    

  • 이전 nginx - traefik 리버스 프록시를 사용한 docker 설정 - 작동하는 다른 도메인의 동일한 설정 및 구성에도 불구하고 한 도메인의 net : err_cert_authority_invalid
  • 다음 hibernate - TypedQuery 결과를 사용자 정의 오브젝트 목록에 맵핑하는 방법