2017-09-27 55 views
1

給出一個包含有相同的變量的不同的變量(即A1, A2, B1, B2如何從purrr :: map2中獲得「整齊」結果?

library(purrr) 
library(tidyr) 
library(broom) 

set.seed(123) 

my_df = data.frame(matrix(rnorm(80), nrow=10)) 
colnames(my_df) <- c("A1_BEFORE", "A1_AFTER", "A2_BEFORE", "A2_AFTER", 
        "B1_BEFORE", "B1_AFTER", "B2_BEFORE", "B2_AFTER") 

如何使用函數編程原則來遍歷對(BEFORE,AFTER)兩種重複測量的數據幀,並獲得「整潔「結果?這是我的嘗試:

bef <- select(my_df, contains("BEFORE")) 
aft <- select(my_df, contains("AFTER")) 
result <- map2(bef, aft, t.test, paired = T) 

上面的結果在多個嵌套列表中。我怎樣才能獲得「整齊」的結果?

result <- tidy(map2(bef, aft, t.test, paired = T)) 

結果< - 整潔(MAP2(BEF,尾部,t.test,配對= T))
錯誤tidy.list(MAP2(BEF,尾部,t.test,配對= T )): 未識別此列表的整理方法 此外:警告消息: 在排序(名稱(x))== c(「d」,「u」,「v」)中: 較長的對象長度不是較短的對象長度的倍數

回答

1

我們可以用map_df,因爲它是一個list

map2(bef, aft, t.test, paired = TRUE) %>% 
      map_df(tidy) 
# estimate statistic p.value parameter conf.low conf.high  method 
#1 -0.1339963 -0.4613684 0.65548187   9 -0.7909999 0.5230073 Paired t-test 
#2 -0.7466034 -1.8820475 0.09250351   9 -1.6439954 0.1507885 Paired t-test 
#3 -0.2304015 -0.5740849 0.57997286   9 -1.1382891 0.6774860 Paired t-test 
#4 0.4860015 1.3468795 0.21095133   9 -0.3302644 1.3022674 Paired t-test 
# alternative 
#1 two.sided 
#2 two.sided 
#3 two.sided 
#4 two.sided 

或者更緊湊地

map2_df(bef, aft, ~tidy(t.test(.x, .y, paired = TRUE))) 
1

這裏是一個替換的方法,做t-檢驗之前整理的數據。顯然得到相同的結果,但這種方法標記最終輸出中正在測試的變量。

僅更改爲DATA-加入id變量索引重複測量

需要除了broomtidyrdplyr

library(tidyr, dplyr, broom) 

使用tidyr重組

my_tidy_df <- my_df %>% 
    mutate(id = row_number()) %>% # needs an id to group repeated measure 
    gather(var, value, -id) %>% 
    extract(var, c("var", "timepoint"), "([[:alnum:]]+)_([[:alnum:]]+)") %>% 
    spread(timepoint, value) 

其給出這個結構

id var  AFTER  BEFORE 
1 1 A1 -1.14854253 -0.9032172 
2 1 A2 2.36114529 -0.6500869 
3 1 B1 0.26204456 -0.5477532 
4 1 B2 -1.34416890 -0.4696884 
5 2 A1 0.53400345 1.2722203 

然後可以運行t檢驗如下每個變量:

my_tidy_df %>% 
    group_by(var) %>% 
    do(broom::tidy(t.test(.$BEFORE, .$AFTER, data=., paired=T))) 

結果:

# Groups: var [4] 
    var estimate statistic p.value parameter conf.low conf.high  method alternative 
    <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <fctr>  <fctr> 
1 A1 0.16014628 0.3470400 0.7365381   9 -0.8837567 1.2040493 Paired t-test two.sided 
2 A2 -0.99798993 -1.6271640 0.1381451   9 -2.3854407 0.3894609 Paired t-test two.sided 
3 B1 0.04916586 0.1289803 0.9002097   9 -0.8131436 0.9114753 Paired t-test two.sided 
4 B2 -0.06919212 -0.1833619 0.8585784   9 -0.9228233 0.7844391 Paired t-test two.sided