首页 > 解决方案 > 如何使用 IF 函数更新数据框中的列?

问题描述

predict <- read.table(header=TRUE, text="
  0         1 
  0.44      0.55     
  0.76      0.24     
  0.71      0.29    
  0.75      0.24 
  0.25      0.75
")

我附上了一个示例数据框,其中有 2 列标题为“0”和“1”。我想使用 IF 函数,以便如果 0 列中的值大于 0.7,则单元格更新为其中包含 0 值。此外,如果“1”列中的值大于 0.7,则单元格将更新为其中包含 1 值。最后,如果“0”或“1”值都不大于 0.7,我希望单元格返回 -99。我附上了一个示例,说明应用此 IF 函数后我的示例会是什么样子。

predict <- read.table(header=TRUE, text="
      0         1 
      -99      -99     
      0        0.24     
      0        0.29    
      0        0.24 
      0.25     1
    ")

我尝试过的代码是;

if(predict[,1] > 0.7 ){predict[,1] == '0' }
if(predict[,1] > 0.7 ){predict[,2] == '1' }

如果您能就更新此 IF 函数的最佳方式向我提供建议,我们将不胜感激。

标签: r

解决方案


更新

基于 AniGoyal 的干预(非常感谢!!!)我更新了答案以实现 OP 的确切期望输出:我将两个答案组合在一个代码中以获得期望的输出:

代码:

predict %>%
  as_tibble %>% 
  mutate(a =  case_when(X0 > 0.7 ~ 0,
                         TRUE ~ ifelse(X0 < 0.7 & X1 < 0.7, -99, X0)),
         b =  case_when(X1 > 0.7 ~ 1,
                         TRUE ~ ifelse(X1 < 0.7 & X0 < 0.7, -99, X1))
         ) %>% 
  select(X0 = a, X1=b)

输出:

      X0      X1
   <dbl>   <dbl>
1 -99    -99    
2   0      0.24 
3   0      0.290
4   0      0.24 
5   0.25   1    

我们可以case_whendplyr包中使用。Mutate更改列X0X1取决于 dencase_when条件。

library(dplyr)

predict %>% 
  mutate(X0 = case_when(X0 > 0.7 ~ 0,
                        TRUE ~ -99),
         X1 = case_when(X1 > 0.7 ~ 1,
                        TRUE ~ -99)
  )

输出:

   X0  X1
1 -99 -99
2   0 -99
3   0 -99
4   0 -99
5 -99   1

如果别的

或者我们可以使用ifelse https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/ifelse

predict$X0 <- ifelse(predict$X0 > 0.7, 0, -99)
predict$X1 <- ifelse(predict$X1 > 0.7, 1, -99)
predict

推荐阅读