У меня есть набор данных, например, такой:

dat1 <- read.table(header=TRUE, text="
Trust_01_T1 Trust_02_T1 Trust_03_T1 Trust_01_T2 Trust_02_T2 Trust_03_T2 Cont_01_T1 Cont_01_T2
5 1 2 1 5 3 1 1
3 1 3 3 4 2 1 2
2 1 3 1 3 1 2 2
4 2 5 5 3 2 3 3
5 1 4 1 2 2 4 5
")

Я хотел бы использовать функцию select для сбора переменных, содержащих Trust AND T1.

dat1 <- dat1 %>%
mutate(Trust_T1 = select(., contains("Trust")))

Кто-нибудь знает, как использовать там два аргумента, чтобы иметь Trust AND T1. Если я использую:

dat1 <- dat1 %>%
mutate(Trust_T1 = select(., contains("Trust"), contains("T1")))

Это дает мне переменные, которые содержат либо Trust, либо T1.

лучше!

natash

Ответов: 2

Ответы (2)

Одним из решений может быть следующее:

library(dplyr)

df %>% select(starts_with('Trust') | contains('_T1'))
#> Trust_01_T1 Trust_02_T1 Trust_03_T1 Trust_01_T2 Trust_02_T2 Trust_03_T2
#> 1 5 1 2 1 5 3
#> 2 3 1 3 3 4 2
#> 3 2 1 3 1 3 1
#> 4 4 2 5 5 3 2
#> 5 5 1 4 1 2 2
#> Cont_01_T1
#> 1 1
#> 2 1
#> 3 2
#> 4 3
#> 5 4

ДАННЫЕ

df <- read.table(text = 
"
Trust_01_T1 Trust_02_T1 Trust_03_T1 Trust_01_T2 Trust_02_T2 Trust_03_T2 Cont_01_T1 Cont_01_T2 
5 1 2 1 5 3 1 1
3 1 3 3 4 2 1 2 
2 1 3 1 3 1 2 2 
4 2 5 5 3 2 3 3 
5 1 4 1 2 2 4 5
", header =T)

Если нам нужны оба, то используйте matches с regex для указания имен столбцов, которые начинаются (^) с 'Trust' и заканчиваются ($) как 'T1' (предполагается, что это только шаблоны

).
library(dplyr)
dat1 %>% 
   select(matches("^Trust_.*T1$"))

Способ mutate, используемый для создания нового столбца, не ясен, поскольку есть несколько столбцов, которые соответствуют 'Trust', за которым следует 'T1'. Если предполагается выполнить некоторые операции над выбранными столбцами, можно использовать либо across, либо c_across с rowwise (неясно из сообщения)

.

2022 WebDevInsider