我有这个数据集如您所见,数据采用了宽格式,我被要求计算两个条件级别之间的差异。如果我需要创建另一个列/数据集,报告每个条件级别的值和条件之间的耦合差异(NEG-CTR - NEU-NOC),我应该怎么做?
flseospp1#
也许我们需要按差异分组,然后创建新列-按'ID'、'SES'分组,循环acrossmutate中的数字列,通过基于'COND'值创建逻辑向量来对值进行子集化,得到差值(-),并通过修改.names(即通过向原始列名添加后缀_diff)来添加新列
across
mutate
-
.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
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
1条答案
按热度按时间flseospp1#
也许我们需要按差异分组,然后创建新列-按'ID'、'SES'分组,循环
across
mutate
中的数字列,通过基于'COND'值创建逻辑向量来对值进行子集化,得到差值(-
),并通过修改.names
(即通过向原始列名添加后缀_diff
)来添加新列如果需要为每组创建一个观测,请使用
summarise