Как заменить значение в кадре данных на основе значения в другом столбце - PullRequest
0 голосов
/ 24 сентября 2018

Я ищу простое решение для моей проблемы (которое, я уверен, существует).

У меня есть следующий пример базы данных:

a    b    c    comp
10   20   30   25
15   30   40   20

Теперь мне нужнонайдите код, который будет проходить по столбцам a, b и c и заменит любую ячейку значением, превышающим то, что записано в столбце comp для этой конкретной строки.

Итак, в этом случае результат будет следующим:

a    b    c    comp
10   20   NA   25
15   NA   NA   20

Какие-нибудь умные решения моей проблемы, которые не вовлекают гнездо для циклов?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Используя data.table вы можете попробовать

library(data.table)
setDT(df)[,lapply(.SD, function(x) ifelse(x > comp, NA, x))]
0 голосов
/ 24 сентября 2018

Это должно сводиться к одному векторизованному сравнению, так как вы работаете с n строками и вектором длины n:

sel <- c("a","b","c")
dat[sel][dat[sel] > dat$comp] <- NA
dat
#   a  b  c comp
#1 10 20 NA   25
#2 15 NA NA   20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...