Я думаю, что было бы лучше установить начальное значение на 1, чтобы данные можно было реплицировать.
set.seed(1)
Data <- data.frame(
a = sample(1:10),
b = sample(c("T", "F"), 10, replace = TRUE),
c = sample(1:10),
x_a = sample(c("T", "F"), 10, replace = TRUE),
x_b = sample(c("T", "F"), 10, replace = TRUE),
y_a = sample(1:10),
y_b = sample(1:10)
)
Данные выглядят следующим образом:
> Data
a b c x_a x_b y_a y_b
1 3 T 10 T F 5 10
2 4 T 2 F F 8 3
3 5 F 6 T F 4 4
4 7 T 1 T F 2 9
5 2 F 9 F F 1 8
6 8 T 8 F F 6 2
7 9 F 7 F T 7 5
8 6 F 5 T T 9 7
9 10 T 3 F F 3 1
10 1 F 4 T F 10 6
Я решилПреобразуйте «T» или «F» в логическое значение «ИСТИНА» или «ЛОЖЬ» с помощью команды type.convert.
Data<-type.convert(Data)
Теперь вы можете использовать Grep, чтобы выбрать столбцы с «x».Применить суммы строк.Вы просто хотите, чтобы один из столбцов был ИСТИНА.Следовательно, до тех пор, пока сумма больше нуля, вы должны взять среднее значение столбцов, начинающихся с y:
Data$new<-ifelse(rowSums(Data[,grep("x",colnames(Data))])>0,rowMeans(Data[,grep("y",colnames(Data))]),Data$a)
> Data
a b c x_a x_b y_a y_b new
1 3 TRUE 10 TRUE FALSE 5 10 7.5
2 4 TRUE 2 FALSE FALSE 8 3 4.0
3 5 FALSE 6 TRUE FALSE 4 4 4.0
4 7 TRUE 1 TRUE FALSE 2 9 5.5
5 2 FALSE 9 FALSE FALSE 1 8 2.0
6 8 TRUE 8 FALSE FALSE 6 2 8.0
7 9 FALSE 7 FALSE TRUE 7 5 6.0
8 6 FALSE 5 TRUE TRUE 9 7 8.0
9 10 TRUE 3 FALSE FALSE 3 1 10.0
10 1 FALSE 4 TRUE FALSE 10 6 8.0