根据另一列中的行更新列行

3

我在R中有一份数据集,如下所示。我正在尝试更新值列中的'0'值的描述列中的空单元格。

 Criteria     Value   Description 
 Success       0                                      
 Success      21      look up
 Success      20      repeat
 Success      19      What is this
 Success      18      Transition
 Success      17      Program
 Success       0              

我希望你能帮忙解决这个问题。我想要得到的输出如下所示:

 Criteria     Value   Description 
 Success       0      TEST                             
 Success      21      look up
 Success      20      repeat
 Success      19      What is this
 Success      18      Transition
 Success      17      Program
 Success       0      TEST 

1
你想用什么来填充这一列?同时提供dput(yourdataframe)的输出结果。请阅读如何在R中创建一个可重现的示例?以提高问题的质量。 - M--
3
mydf$Value等于0时,将mydf$Description的值更改为"TEST"。 - Josh Gilfillan
@Masoud:感谢分享链接。这是一篇很好的文章,我会接受建议并重新整理我的问题以便复现。 - Sree
2个回答

3

有几个选项:

基础 R - 选项1

mydf$Description[mydf$Value == 0] <- "TEST"

基础 R - 选项 2

mydf$Description <- ifelse(mydf$Value == 0, "TEST", mydf$Description)

dplyr - if_else()

library("dplyr")
mydf <- mydf %>% mutate(Description = if_else(Value == 0, "TEST", Description))

dplyr - case_when()

当需要评估一系列if语句时,该函数非常有用。

library("dplyr")
mydf <- mydf %>% mutate(
  Description = case_when(
    Value == 0 ~ "TEST",
    TRUE ~ Description
    )
  )

非常感谢。由于在我的情况下它们是“因素”,所以我遇到了一些描述问题。在使用之前,必须将它们转换为字符。感谢您提供多种解决方案。 - Sree

1

可以使用ifelse()语句。

假设您的数据框称为“dataset”,您可以使用ifelse()语句检查Value列是否为0。如果是0,则在Description列中输入值“TEST”。如果不是0(否则),则只需输入该列中已经存在的值。

 dataset$Description <- ifelse(dataset$Value == 0, 
                               "TEST" , 
                               dataset$Description)

ifelse 是相当低效的,也许可以尝试 dataset$Description[dataset$Value==0]='Test' 或者 dataset$Description[dataset$Value%in%0]='Test' - BENY

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接