Изменение одного, но не всех значений, которые удовлетворяют условию - PullRequest
0 голосов
/ 27 августа 2018

Итак, у меня есть этот фрейм данных столбца condition и столбца value. Предположим, я хочу изменить одно из значений, для которых выполняется условие, но не все значения, для которых выполняется условие. Идея здесь в том, что я хотел бы изменить значения одно за другим (или выбрать одно случайно).

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

Я хотел бы сохранить это в новом столбце. Предположим, я случайно выбрал строку 2: условие имеет значение ИСТИНА, а исходное значение равно 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, третьего столбца номеров групповых строк и образца функции, но есть ли более хороший способ? В частности, мне нужно убедиться, что я не генерирую новый столбец, если условие не выполняется ни для одного из значений. В противном случае я теряю много компьютерного времени позже в анализе. Обычно я делаю что-то внутри тидиверса, если могу, но я не против, если есть хорошее решение без использования пакета (или использования другого пакета). Спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

Это делает это без 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)) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...