R语言 如何为其他行值条件下的差值创建新列

nukf8bse  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(287)

我有这个数据集
如您所见,数据采用了宽格式,我被要求计算两个条件级别之间的差异。如果我需要创建另一个列/数据集,报告每个条件级别的值和条件之间的耦合差异(NEG-CTR - NEU-NOC),我应该怎么做?

flseospp

flseospp1#

也许我们需要按差异分组,然后创建新列-按'ID'、'SES'分组,循环acrossmutate中的数字列,通过基于'COND'值创建逻辑向量来对值进行子集化,得到差值(-),并通过修改.names(即通过向原始列名添加后缀_diff)来添加新列

library(dplyr)
data_negctr2 <- data_negctr1 %>%
    group_by(ID, SES) %>% 
    mutate(across(where(is.numeric), ~ .[COND == 'NEG-CTR'] - 
        .[COND == 'NEG-NOC'], .names = "{.col}_diff")) %>%
    ungroup
  • 输出
> print(head(data_negctr2, 2), Inf)
# A tibble: 2 × 11
  ID    COND    SES   `LPP2(1000-1500).FCz` `LPP2(1000-1500).Cz` `LPP2(1000-1500).Pz` `LPP2(1000-1500).POz` `LPP2(1000-1500).FCz_diff`
  <chr> <chr>   <chr>                 <dbl>                <dbl>                <dbl>                 <dbl>                      <dbl>
1 01    NEG-CTR L                    -0.397                 2.92                 8.38                  9.61                      -1.41
2 01    NEG-NOC L                     1.02                  1.85                 4.89                  7.21                      -1.41
  `LPP2(1000-1500).Cz_diff` `LPP2(1000-1500).Pz_diff` `LPP2(1000-1500).POz_diff`
                      <dbl>                     <dbl>                      <dbl>
1                      1.06                      3.49                       2.40
2                      1.06                      3.49                       2.40

如果需要为每组创建一个观测,请使用summarise

library(stringr)
data_negctr3 <- data_negctr1 %>% 
        group_by(ID, SES) %>%  
        summarise(across(where(is.numeric),
       ~ .[COND == 'NEG-CTR'] -  .[COND == 'NEG-NOC'],
        .names = "{.col}_diff"), 
      COND = str_c(COND, collapse = ' - '), .groups = 'drop')
  • 输出
> data_negctr3
# A tibble: 25 × 7
   ID    SES   `LPP2(1000-1500).FCz_diff` `LPP2(1000-1500).Cz_diff` `LPP2(1000-1500).Pz_diff` `LPP2(1000-1500).POz_diff` COND           
   <chr> <chr>                      <dbl>                     <dbl>                     <dbl>                      <dbl> <chr>          
 1 01    L                         -1.41                      1.06                      3.49                       2.40  NEG-CTR - NEG-…
 2 01    R                          2.38                      1.59                     -1.94                      -0.792 NEG-CTR - NEG-…
 3 01    V                          2.96                      5.09                      1.03                      -2.03  NEG-CTR - NEG-…
 4 02    L                          5.01                      4.79                      4.18                       4.13  NEG-CTR - NEG-…
 5 02    R                          3.15                      2.38                      0.752                     -1.24  NEG-CTR - NEG-…
 6 04    L                         -2.71                     -2.49                      0.347                      1.60  NEG-CTR - NEG-…
 7 04    R                          2.41                      7.84                      3.43                       4.68  NEG-CTR - NEG-…
 8 04    V                          0.832                     0.424                    -1.92                      -0.585 NEG-CTR - NEG-…
 9 06    L                         -0.296                    -1.73                     -2.65                      -1.19  NEG-CTR - NEG-…
10 06    R                         -0.338                    -3.95                     -3.39                      -2.78  NEG-CTR - NEG-…
# … with 15 more rows

相关问题