Я хочу отфильтровать все значения var3 <5, сохранив хотя бы одно вхождение каждого значения var1. </p>
> foo <- data.frame(var1=c(1, 1, 8, 8, 5, 5, 5), var2=c(1,2,3,2,4,6,8), var3=c(7,1,1,1,1,1,6))
> foo
var1 var2 var3
1 1 1 7
2 1 2 1
3 8 3 1
4 8 2 1
5 5 4 1
6 5 6 1
7 5 8 6
subset(foo, (foo$var3>=5))
удалит строки со 2 по 6, и я потерял бы var1 == 8.
- Я хочу удалить строку, если есть другое значение var1, которое удовлетворяет условию foo $ var3> = 5. См. Строку 5.
- Я хочу сохранить строку, назначив NA для var2 и var3, если все вхождения значения var1 не удовлетворяют условию foo $ var3> = 5.
Это результат, который я ожидаю:
var1 var2 var3
1 1 1 7
3 8 NA NA
7 5 8 6
Это самое близкое, что у меня есть:
> foo$var3[ foo$var3 < 5 ] = NA
> foo$var2[ is.na(foo$var3) ] = NA
> foo
var1 var2 var3
1 1 1 7
2 1 NA NA
3 8 NA NA
4 8 NA NA
5 5 NA NA
6 5 NA NA
7 5 8 6
Теперь мне просто нужно знать, как условно удалить правильные строки (2, 3 или 4, 5, 6): удалить строку, если var2 и var3 равны NA, и если значение var1 имеет более 1 вхождения.
Но, несомненно, есть гораздо более простой / элегантный способ решения этой маленькой проблемы.
редактировать: изменено foo
, чтобы напоминать мой вариант использования подробнее