Обновите значение столбца первой строки с учетом критериев фильтрации по столбцу в R - PullRequest
0 голосов
/ 18 января 2019

У меня сложный вопрос, ответа на который нет нигде.

Предположим, что у меня есть следующий фрейм данных:

   individual      gen_check    acc       loss
1  nnn/nn/nn/nn    2            0.9889    0.0112
2  nnn/n/nn        2            0.7845    0.3451
3  nnn/nn/nn/nn    2            0.564     0.4231

Что я хочу сделать, это обновить значение gen_check первой строки, когда я фильтрую по индивидуальным = "nnn / nn / nn / nn" и gen_check = 2, и я хочу обновить значение gen_check до 3.

Я пробовал следующее выражение, но оно изменяет мне и первый, и третий столбцы, но я хочу обновить первый.

fitness_calculations <- within(fitness_calculations, gen_check[individual == "nnn/nn/nn/nn" & gen_check == 2] <- 3)

1 Ответ

0 голосов
/ 18 января 2019

Мы создаем индекс вместе с условием, является ли он duplicated

i1 <- with(fitness_calculations, individual == "nnn/nn/nn/nn" & gen_check ==  2)
i2 <- !duplicated(i1) & i1

fitness_calculations$gen_check[i2] <- 3
fitness_calculations
#    individual gen_check    acc   loss
#1 nnn/nn/nn/nn         3 0.9889 0.0112
#2     nnn/n/nn         2 0.7845 0.3451
#3 nnn/nn/nn/nn         2 0.5640 0.4231

Или другой вариант - обернуть с which и извлечь только первый индекс

i2 <- which(i1)[1]
fitness_calculations$gen_check[i2] <- 3

Данные

fitness_calculations <- structure(list(individual = c("nnn/nn/nn/nn",
 "nnn/n/nn", "nnn/nn/nn/nn"
 ), gen_check = c(2L, 2L, 2L), acc = c(0.9889, 0.7845, 0.564), 
loss = c(0.0112, 0.3451, 0.4231)), class = "data.frame", row.names = c("1", 
 "2", "3"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...