#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