更改一个但不是全部满足条件的值

时间:2018-08-27 19:32:02

标签: r dplyr

所以我有一个condition列和value列的数据帧。假设我要更改满足条件的值之一,但不能更改满足条件的所有值。这里的想法是,我想一个接一个地更改值(或随机选择一个)。

df <- data.frame(condition = c(TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE),
                 value = 8:1)

我想将其存储在新列中。假设我随机选择第2行:条件为TRUE,原始值为7。我将其更改为0(或其他某个值)。在这种情况下,所需的输出是:

> df
condition value
1      TRUE     8
2      TRUE     7
3      TRUE     6
4      TRUE     5
5     FALSE     4
6     FALSE     3
7     FALSE     2
8     FALSE     1

我想我可以使用if语句,group-row-numbers的第三列和示例函数来执行此操作,但是有更好的方法吗?特别是,我需要确保在不满足任何值的条件的情况下,不要生成新列。否则,稍后在分析中我会浪费大量的计算时间。 如果可以的话,我通常会在tidyverse内部做事,但是我不介意是否有一个不错的解决方案而不使用该软件包(或使用其他软件包)。 谢谢!

1 个答案:

答案 0 :(得分:0)

这没有第3列,但是与您已经有的想法相同。

df <- data.frame(condition = c(TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE),
                 value = 8:1)
sample<-sample(1:8,1)
library(dplyr)
df2<-df %>% mutate(value=ifelse(condition==TRUE & row_number()==sample,0,value))