Изменение значения одного столбца на основе состояния другого с помощью цикла R

#r #loops #if-statement

#r #циклы #if-оператор

Вопрос:

У меня есть фрейм данных, который выглядит примерно так, но в нем много парных столбцов, следующих формату «Name», «F_Name».

     data.frame("Site" = c("X", "Y", "Z"), "Temp" = c(2, 3, 4), "F_Temp" = c(1, 5, -3), "Salinity" = c(5, 6, 7), "F_Salinity" = c(6, 1, -3))
  

Всякий раз, когда «F_Name» равно 1 или -3, я хочу изменить значение «Name» на NA. Например, в строках, где F_Temp равно -3 или 1, я хочу изменить значение Temp на NA.

Я хотел бы сделать это с помощью цикла, поскольку существует много парных столбцов, и я не хочу вводить их все. Каков наилучший способ сделать это?

Ответ №1:

Я бы предложил этот циклический подход, поскольку столбцы сопряжены:

 #Data
df <- data.frame("Site" = c("X", "Y", "Z"),
                 "Temp" = c(2, 3, 4), "F_Temp" = c(1, 5, -3), 
                 "Salinity" = c(5, 6, 7), "F_Salinity" = c(6, 1, -3))
#Detect columns with pattern F_
val <- which(grepl('F_',names(df)))
#Loop
for(i in val)
{
  df[,i-1] <- ifelse(df[,i]==-3 | df[,i]==1, NA, df[,i])
}
  

Вывод:

   Site Temp F_Temp Salinity F_Salinity
1    X   NA      1        6          6
2    Y    5      5       NA          1
3    Z   NA     -3       NA         -3