简体   繁体   English

使用循环根据另一列的条件更改一列的值 R

[英]Changing value of one column based on condition of another with a loop R

I have a data frame that looks something like this, but it has many paired columns following the format "Name", "F_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))

Whenever "F_Name" equals 1 or -3, I want to change the value of "Name" to NA.每当“F_Name”等于 1 或 -3 时,我想将“Name”的值更改为 NA。 For example, in the rows where F_Temp equals -3 or 1, I want to change the value of Temp to be NA.例如,在 F_Temp 等于 -3 或 1 的行中,我想将 Temp 的值更改为 NA。

I would like to do this using a loop, as there are many paired columns and I don't want to have to type them all out.我想使用循环来执行此操作,因为有许多成对的列,我不想将它们全部键入。 What is the best way to go about this?关于这个,go 最好的方法是什么?

I would suggest this loop approach as columns are paired:我会建议这种循环方法,因为列是成对的:

#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])
}

Output: Output:

  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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM