Jak přepsat stejný kód přes funkci

0

Otázka

Vymyslel jsem si následující kód

out %>% group_by(tests0, GROUP) %>% 
  summarise(
            mean0 = mean(score0, na.rm = T),
            stderr0 = std.error(score0, na.rm = T), 
            mean7 = mean(score7, na.rm = T), 
            stederr7 = std.error(score7, na.rm = T),
            diff.std.mean = t.test(score0, score7, paired = T)$estimate, 
            p.value = t.test(score0, score7, paired = T)$p.value, 
            )

a získal jsem následující výstup

 tests0     GROUP    mean0 stderr0 mean7 stederr7 diff.std.mean p.value
   <fct>      <fct>    <dbl>   <dbl> <dbl>    <dbl>         <dbl>   <dbl>
 1 ADAS_CogT0 CONTROL   12.6   0.525  13.6    0.662        -1.15  0.00182
 2 ADAS_CogT0 TRAINING  14.0   0.613  12.6    0.570         1.40  0.00295
 3 PVF_T0     CONTROL   32.1   1.22   31.3    1.45          0.498 0.636  
 4 PVF_T0     TRAINING  31.6   1.37   34.3    1.51         -2.48  0.0102 
 5 ROCF_CT0   CONTROL   29.6   0.893  30.3    0.821        -0.180 0.835  
 6 ROCF_CT0   TRAINING  30.1   0.906  29.5    0.929         0.489 0.615  
 7 ROCF_IT0   CONTROL   12.8   0.563  12.2    0.683         0.580 0.356  
 8 ROCF_IT0   TRAINING  10.9   0.735  12.3    0.768        -1.44  0.0238 
 9 ROCF_RT0   CONTROL   12.1   0.725  12.5    0.797        -0.370 0.598  
10 ROCF_RT0   TRAINING  10.5   0.746  10.9    0.742        -0.534 0.370  
11 SVF_T0     CONTROL   35.5   1.05   34      1.15          1.42  0.107  
12 SVF_T0     TRAINING  34.1   1.04   32.9    1.16          0.962 0.231

V případě, že bych chtěla udělat to samé přes across functionCo mám udělat, aby bylo dosaženo stejných výsledků, je uvedeno v kódu výše? Vlastně jsem v maléru, protože jsem kreslila nějaký příklad z odpovědi publikované pod tuto otázku Reprodukovat složitou tabulku s manželskou headesrs, ale nebyl jsem schopen, aby vyhovovaly to správně.

Tady dataset

> dput(head(out, 100))
structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 
45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 
77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 
93, 94, 95, 96, 97, 98, 99, 100), GROUP = structure(c(2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L), .Label = c("CONTROL", "TRAINING"), class = "factor"), 
    Gender = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 2L, 1L, 2L, 
    2L, 2L, 2L, 2L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 
    2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 
    2L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 
    2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 1L, 
    1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 
    2L), .Label = c("M", "F"), class = "factor"), Age = c(74, 
    76, 81, 74, 69, 72, 75, 83, 78, 72, 82, 68, 72, 72, 73, 80, 
    69, 72, 70, 80, 75, 80, 78, 74, 82, 74, 80, 82, 78, 81, 66, 
    71, 70, 79, 78, 73, 72, 77, 77, 71, 83, 74, 70, 71, 77, 69, 
    67, 64, 79, 71, 77, 77, 73, 67, 68, 79, 81, 67, 84, 75, 80, 
    73, 68, 74, 77, 79, 79, 72, 73, 78, 76, 78, 77, 74, 78, 77, 
    77, 82, 77, 70, 77, 81, 79, 75, 74, 78, 69, 77, 73, 77, 70, 
    79, 70, 72, 77, 72, 71, 71, 73, 81), Education = c(18, 4, 
    8, 5, 8, 11, 5, 5, 4, 8, 8, 12, 5, 18, 13, 5, 13, 13, 5, 
    5, 13, 5, 3, 8, 17, 5, 8, 5, 5, 8, 17, 8, 18, 18, 13, 13, 
    13, 13, 15, 17, 8, 5, 5, 13, 8, 5, 11, 13, 8, 8, 8, 5, 13, 
    8, 5, 17, 8, 12, 13, 5, 8, 8, 8, 5, 3, 8, 18, 5, 8, 13, 8, 
    5, 17, 8, 5, 17, 5, 8, 11, 8, 8, 5, 12, 3, 8, 8, 8, 13, 5, 
    5, 8, 8, 13, 5, 5, 8, 13, 5, 8, 12), tests0 = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("ADAS_CogT0", 
    "PVF_T0", "ROCF_CT0", "ROCF_IT0", "ROCF_RT0", "SVF_T0"), class = "factor"), 
    score0 = c(14.66, 15.33, 17.33, 19, 7.66, 12.6, 18.67, 14.99, 
    17.99, 17.33, 13.66, 16.99, 10.66, 9.66, 14.99, 15.66, 13.33, 
    4.33, 14.33, 15.99, 16.33, 10.66, 14.66, 10.66, 19.33, 17.66, 
    15.99, 20.66, 20.6, 17, 10.33, 6.33, 6.66, 19.99, 13.33, 
    24.33, 12.33, 10.33, 12.33, 9.66, 10.99, 13.99, 23, 6.32, 
    11.32, 13.99, 14.66, 8.99, 14.33, 9.99, 7.33, 15.66, 14, 
    7.99, 23.32, 14.66, 9.99, 5.66, 6.99, 11.66, 10.33, 6.99, 
    19.32, NA, 10, 17.66, 13.66, 10.32, NA, NA, 8.66, 9, 6.99, 
    14.99, 9.66, 13.66, 15.32, 12, 14, 13.66, 11.99, 15.66, 16, 
    15, 16.99, 20, 11, 7.99, 8.33, 8.32, 14.99, 18.66, 10.33, 
    11.99, 9.32, 17, 14.33, 14.66, 16.6, 9.99), tests7 = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("ADAS_CogT7", 
    "PVF_T7", "ROCF_CT7", "ROCF_IT7", "ROCF_RT7", "SVF_T7"), class = "factor"), 
    score7 = c(16, 9.32, 21.33, 17, 8.32, 11, 14.99, 10.99, 17, 
    18.33, 13.32, 14.34, 8.99, 7, 11.99, 15.33, 6.99, 5.33, 12.32, 
    13, 21.32, 7.99, 13.33, 11.99, 17.32, 16.32, 16.33, 14.66, 
    18.99, 17.33, 7.99, 9.33, 10.99, NA, 12.99, 16.33, 21.66, 
    9, 9.34, 8.66, 8.33, 13.66, 15.66, 6.66, 10.99, 13.33, 13.33, 
    7.99, 11.99, 11.32, 7.33, 9.66, 6.99, NA, 15.99, 15.66, 14.66, 
    6.32, 7, 11, 14, 10.33, 24.66, NA, 14.99, NA, 15.99, 9.32, 
    NA, NA, 9.99, 9.33, 7.66, 17.33, 10.32, 16, 17, 12.99, 15, 
    14.33, 10, 14.99, 19, 13.99, 19.33, NA, 10, 6.99, 11.66, 
    6.66, 14.33, 16, 8.66, 10, NA, 20, 14.99, 19.66, 26.66, 8.99
    )), row.names = c(NA, -100L), class = c("tbl_df", "tbl", 
"data.frame"))
> 

Níže můžete najít způsob, jak bych chtěl získat stejný. To ius metoda vyžaduje pro .x manipulace.

out %>%    
group_by(across(all_of(tests0, GROUP))) %>%    summarise(across(starts_with('score'),                         
list(mean = ~ mean(.x,na.rm = T),            
stderr = ~ std.error(.x, na.rm = TRUE),            
diff.std.mean = ~ t.test(.x, na.rm = T)))$estimate,              
p.value = ~ t.test(.x, na.rm = T)))$p.value)),.groups = "drop")
across dplyr r tidyverse
2021-11-23 20:51:51
4
2

Můžete použít argument .names v across():

library(dplyr)
out %>%
  group_by(tests0, GROUP) %>%
  summarize(across(c(score0, score7), sd, na.rm = TRUE, .names = "sd_{.col}"), 
            across(c(score0, score7), mean, na.rm = TRUE, .names = "mean_{.col}"), 
            diff.std.mean = t.test(score0, score7, paired = T)$estimate, 
            p.value = t.test(score0, score7, paired = T)$p.value) %>%
  ungroup()
#> `summarise()` has grouped output by 'tests0'. You can override using the `.groups` argument.
#> # A tibble: 2 x 8
#>   tests0 GROUP sd_score0 sd_score7 mean_score0 mean_score7 diff.std.mean p.value
#>   <fct>  <fct>     <dbl>     <dbl>       <dbl>       <dbl>         <dbl>   <dbl>
#> 1 ADAS_~ CONT~      3.72      4.81        12.5        13.5         -1.24 0.00471
#> 2 ADAS_~ TRAI~      4.55      4.15        14.0        12.6          1.40 0.00295

Vytvořen na 2021-11-26 do reprex balíček (v2.0.1)

EDIT

Pokud dáváte přednost seznamu, že by bylo jednodušší určit samostatných částí, a pak svázat je dohromady:


library(data.table)
by <- c("tests0", "GROUP")
out_dt <- data.table::data.table(out)
means <- out_dt[, sapply(.SD, function(x) list(mean = mean(x, na.rm = TRUE))), 
                by = by, .SDcols = patterns("^score")]
sds <- out_dt[, sapply(.SD, function(x) list(sd = sd(x, na.rm = TRUE))), 
                by = by, .SDcols = patterns("^score")]
t_est <- out_dt[, .(diff.std.mean = t.test(score0, score7, paired = T)$estimate), by = by]
tpvalue <- out_dt[, .(p.value = t.test(score0, score7, paired = T)$p.value), by = by] 
list(means = means, sds = sds, diff.std.mean = t_est, p.value = tpvalue)

2021-11-27 13:16:17

Díky za vaši odpověď. Vlastně jsem se snažil dělat tento pokus. out %>% group_by(across(all_of(by))) %>% summarise(across(starts_with('score'), list( mean = ~ mean(.x,na.rm = T), stderr = ~ std.error(.x, na.rm = TRUE), diff.std.mean = ~ t.test(.x, get(str_replace(cur_column(), "score", "score7")))$estimate, p.value = ~ t.test(.x, get(str_replace(cur_column(), "score0", "score7")))$p.value ) ), .groups = "drop")
mały_statystyczny

Zobrazování seznamu z držáků. Myslíte si, že je možné odo stejné?
mały_statystyczny

ve skutečnosti, pokud se podívat na můj komentář jste mohli vidět, že tam je, že list() funkci bych chtěl manipulovat, zejména .x indexů v rámci
mały_statystyczny

Jsem aktualizovány moje odpověď, to teď vrací seznam
mharinga

Hele, já opravdu děkuji, vaše odpovědi jsou docela instrctive, ale možná to nebylo jasné, tak daleko. To, co jsem snažím udělat, je manipute správně kód do list() argument (mohli jste vidět lepší možná, že teď, pod vysoký post), protože pokud se pokusíte spustit to otočí zpět některé redundantní data. To je právě to, co potřebuji, to je prostě být jasnější. Jste tlačit dopředu své filmy, tak nechci, aby vás nutit příliš mnoho. Tak, děkuji vám. Je vždy poučné.
mały_statystyczny

Nechápu, co se snažíte dosáhnout. Prosím, aktualizujte vaši otázku s právem vstupu a požadovaného výstupu.
mharinga
2

Tady je jiný přístup, možná budete chtít, aby zvážila. První jsem vzal svůj kód a vyjmout a vložit jej do funkce. Abstrakce názvy sloupců a odstranění závislosti na plotrix balíček pro výpočet standardní chyby jsou pouze změny.

g <- function (df)
{
  nms <- c(names(df)[1:2],
           paste0('mean',   sub(".*[a-z]","",names(df)[3])),
           paste0('stderr', sub(".*[a-z]","",names(df)[3])),
           paste0('mean',   sub(".*[a-z]","",names(df)[4])),
           paste0('stderr', sub(".*[a-z]","",names(df)[4])),
           'diff.std.mean', 'p.value')
  
  z <- df %>% group_by(df[,1:2]) %>%
    summarize(
    x1 = mean(pull(df[,3]), na.rm = T),
    x2 = sd(pull(df[,3]), na.rm=T) / sqrt(sum(!is.na(pull(df[,3])))),
    x3 = mean(pull(df[,4]), na.rm = T),
    x4 = sd(pull(df[,4]), na.rm=T) / sqrt(sum(!is.na(pull(df[,4])))),
    x5 = t.test(pull(df[,3]), pull(df[,4]), paired = T)$estimate, 
    x6 = t.test(pull(df[,3]), pull(df[,4]), paired = T)$p.value)
    colnames(z) <- nms
    return(z)
}

Pak, protože testovací data měla pouze jedna úroveň faktoru a nedostatečné velikosti vzorku pro plotrix::std.chybová funkce, které jste použili, jsem představil změnu v test0' faktor, zdvojnásobil velikost vzorku, a upustil nepoužité hladiny, protože by způsobit iterací na prázdné rámy. Kromě toho jsem přidal score8 ukázat, jak jsi mohl běžet na jiných proměnných.

s <- t %>% mutate(tests0 = case_when(Education <= 8 ~ 'ADAS_CogTO', T ~ 'PVF_T0'),
                  score8 = score0 + score7)
q <- rbind(s, s)  
fct_drop(q$tests0)

Pak jsem rozdělil rámu do úrovně faktoru, aplikuje funkci na každý z rozděluje, pak remerged dat dohromady uvnitř funkce, která vám umožní manipulovat skóre a skupiny proměnných. Předpokládal jsem, že 2 každý, který je bezpečný s skóre proměnných od vašeho dělají párový t-test, a to je snadno rozšířitelná pomocí skupiny proměnných (pokud jste jednoduše přesunout skóre proměnných do pozice 1 a 2, a použít všechny zbývající proměnné předané do funkce jako skupina proměnných).

h <- function(df, group_vars, score_vars)
{
  z <- df %>% select(group_vars, score_vars) 
  z <- z  %>% group_by(z[,1:2]) %>%
              group_map( ~ g(.x), .keep = T) %>%
              bind_rows()
}

Všimněte si, že pokud budete chtít aplikovat na jiná data, stačí pouze změnit sloupce prošel do skupiny a skóre proměnných. By mělo být poměrně snadné změnit, že pokud chcete jako tak, jen myslel, že to byl dobrý rámec pro to, co se vám zdá, že se snaží dělat. Přemýšlejte o tom, jak zvládnout případ, kdy test0 je null a test7 je non-null (nebo naopak), protože tyto připomínky jsou zahrnuty do své souhrnné statistiky, ale nutně vyloučeny z t-testu. Hodně štěstí.

x <- h(q, c("tests0", "GROUP"), c("score0", "score7")) %>%
 group_by(tests0) %>%
 pivot_wider(id_cols     = tests0,
             names_from  = GROUP,
             values_from = c("mean0","stderr0","mean7","stderr7",
                             'diff.std.mean', 'p.value'))
2021-11-26 12:12:30

Děkuji vám za váš příspěvek. Btw dívám se manipulovat kód, aby se obatin stejné výsledky, s tím, že seznam() funkce
mały_statystyczny

To je opravdu cool funkce, ale ve skutečnosti reksults hledám zahrnují manipulaci .x indexy do seznamu() funkce
mały_statystyczny

I když nechápu, co se pokoušíte říct, "zahrnují manipulaci .x indexy do seznamu() funkce" I generalizované jména/vstupy a udělal výstup jmen podmíněna vstupní jména (která se zdá být to, co chcete).
Jim

Myslíte si, seeel poslední kód? Níže údajů, které jsem poskytl...pokud se pokusíte spustit je, jak to je, to dostane zpět některé nadbytečné hodnoty, protože hodnoty ve sloupci ŘÍCT, že jsou stejné ve sloupci DIFF.STD.ŘÍCT....to znamená, že .x v t.test() funkce by měla být přepsána ve správný způsob, jak vykonávat t.test()....tohle je jen aby bylo jasnější....chtít nikoho nutit, aby upravit řešení trvale
mały_statystyczny

Ten kód nespustí, takže opravdu nemůžu říct. Ty procházejí v seznamu?vektor? jménem tím, že nemohu vidět. Mám podezření, že se pokoušíte spustit, t-testy s každou kombinací skóre, ale také může být při pokusu o spuštění t-testy s různými kombinacemi seskupení proměnných napříč všemi skóre.
Jim

Shrnout celé funguje pouze na jeden sloupec v době, pokud vím. To je důvod, proč .x sloupec nemůže provést t-test. To je důvod, proč jsem vytáhl přes a místo toho opakoval prostřednictvím skupin. Přidal jsem pivot_wider po takže můžete vidět, jak se dostanete data v předepsaném formátu (od jiných), a t-test se provádí na sloupci rozdíl. Pořád si myslím, že může mít problém v včetně záznamů s score0 v mysli výpočet, ale ne v t-testu vzhledem k chybějící score7. Na zdraví
Jim


Psala jsem ti tam
mały_statystyczny
2

Já nemám funkci, tzv. std.error takže jsem použil sd, ale samozřejmě můžete změnit.

library(dplyr)
library(readr)

out %>% 
  group_by(tests0, GROUP) %>% 
  summarise(
    across(c(score0, score7), list(mean = mean, stderr = sd), na.rm = TRUE,
           .names = '{.fn}{parse_number(.col)}'),
    with(t.test(score0, score7, paired = T),
         tibble(diff.std.mean = estimate,
                p.value)))
# # A tibble: 2 × 8
#   tests0     GROUP    mean0 stderr0 mean7 stderr7 diff.std.mean p.value
#   <fct>      <fct>    <dbl>   <dbl> <dbl>   <dbl>         <dbl>   <dbl>
# 1 ADAS_CogT0 CONTROL   12.5    3.72  13.5    4.81         -1.24 0.00471
# 2 ADAS_CogT0 TRAINING  14.0    4.55  12.6    4.15          1.40 0.00295

Ve skutečnosti, jen bych dal výše uvedený kód ve funkci, která bere x a y argument a pak spustit fun(df, x = score0, y = score7). Ale, jen tak pro zábavu, pokud je nutné použít .x a .ytady je jeden způsob, jak (i když imo to by bylo trochu hloupé to dělat)

df %>% 
  group_by(tests0, GROUP) %>% 
  select(starts_with('score')) %>% 
  summarise(
    across(everything(), list(mean = mean, stderr = sd), na.rm = TRUE,
           .names = '{.fn}{parse_number(.col)}'),
    across(everything(), list(list)) %>% 
      pmap_dfr(~ t.test(.x, .y, paired = TRUE)[c('estimate', 'p.value')]) %>% 
      transmute(diff.std.mean = estimate, p.value))

# # A tibble: 2 × 8
# # Groups:   tests0 [1]
#   tests0     GROUP    mean0 stderr0 mean7 stderr7 diff.std.mean p.value
#   <fct>      <fct>    <dbl>   <dbl> <dbl>   <dbl>         <dbl>   <dbl>
# 1 ADAS_CogT0 CONTROL   12.5    3.72  13.5    4.81         -1.24 0.00471
# 2 ADAS_CogT0 TRAINING  14.0    4.55  12.6    4.15          1.40 0.00295
2021-11-28 18:06:52

Ahoj, pěkný kód, co skutečnost, rozdělit průměr a sd ze t.test je vzhledem k tomu, že je jednodušší, aby se skript kód? Můžete zkusit řešení s řešením jsem vyslán dolů dataset? Jak by měl scénář .x t.test funkce?
mały_statystyczny

Jsem to rozdělit, protože across platí funkcí jednoho sloupce najednou. Pro t.testbudete potřebovat dva sloupce.
IceCreamToucan

Co tím myslíte přesně? Myslíte si, odkazovat se na kód níže dataset? Myslíte si, že použití vždy, že .x index je možné vypočítat t.test()?
mały_statystyczny

T.test funkce potřebuje dva sloupce. .x v rámci across odkazuje na jeden sloupec. Nemyslím si, že to je možné.
IceCreamToucan

Ah ok. To je důvod, proč pomocí .y index mám nějaké chyby...To je způsob, hledám
mały_statystyczny
1

Myslel jsem, že z možných řešení (které může nebo nemusí pomoci) pomocí across() "ručně", bez použití funkcí jednoho sloupce najednou. Výsledný výstup je data.frame seznam sloupců, které jsou hluboce vnořené, takže unnest() přijde vhod. Také jsem použil possibly() jak řešit případ, kdy dva sloupce nejsou k dispozici, pamatujte, že across() může odpovídat libovolný počet sloupců a t.test() potřebuje x a y argumenty.

Kód:

library(tidyverse)

data <-
  df %>%
  group_by(tests0, GROUP) %>%
  summarize(
    all = list(across(starts_with("score")) %>%
      {
        tibble(
          ttest   = data.frame(possibly(~ reduce(., ~ t.test(.x, .y, paired = TRUE))[c("estimate", 'p.value')], NA)(.)),
          means   = data.frame(map(., ~ mean(.x, na.rm = TRUE)) %>% set_names(., str_replace(names(.), "\\D+", "mean"))),
          stderrs = data.frame(map(., ~ sd(.x, na.rm = TRUE)) %>% set_names(., str_replace(names(.), "\\D+", "stederr")))
        )
      })
  )
#> `summarise()` has grouped output by 'tests0'. You can override using the `.groups` argument.


data %>%
  unnest(all) %>%
  unnest(-c("tests0", "GROUP"))
#> # A tibble: 2 × 8
#> # Groups:   tests0 [1]
#>   tests0     GROUP    estimate p.value mean0 mean7 stederr0 stederr7
#>   <fct>      <fct>       <dbl>   <dbl> <dbl> <dbl>    <dbl>    <dbl>
#> 1 ADAS_CogT0 CONTROL     -1.24 0.00471  12.5  13.5     3.72     4.81
#> 2 ADAS_CogT0 TRAINING     1.40 0.00295  14.0  12.6     4.55     4.15

Vytvořen na 2021-11-29 do reprex balíček (v2.0.1)

2021-11-27 00:08:10

To je asi ta odpověď, kterou jsem hledal....to prostě musí být dokončena s p.hodnota sloupce
mały_statystyczny

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................