Удаление строк с условием для другого столбца в кадре данных - PullRequest
0 голосов
/ 24 марта 2020

У меня есть этот кадр данных из 4 столбцов, и я хочу удалить те строки, которые не менее чем равны разности от 100 до col_A

User    Col_A   Col_B   Col_C
   a    1450    1450    1250
   b    1450    1450    1440
   c    1320    1280    1225
   d    1300    1300    1190
   e    1295    1250    1200
   f    1295    1295    1250
   g    1295    1240    1000
   h    1295    1295    1260
   j    1295    1295    1260
   k    1295    1295    1260
   l    1295    1295    1190
   m    1295    1295    1260
   n    1250    1250    1220
   o    1200    1200    1160
   p    1180    1180    1070
   q    1030    1030    990

Я хочу сохранить только те строки, основанные на данных в Column_ C в моем фрейме данных, который меньше, чем разница от 100 до Column_A

User    Col_A   Col_B   Col_C
   b    1450    1450    1440
   c    1320    1280    1225
   e    1295    1250    1200
   f    1295    1295    1250
   h    1295    1295    1260
   j    1295    1295    1260
   k    1295    1295    1260
   m    1295    1295    1260
   n    1250    1250    1220
   o    1200    1200    1160
   q    1030    1030    990

Я пытаюсь работать со следующим кодом, чтобы отфильтровать строки, но не могу получить желаемый результат.

df<- filter(df, Col_C<=Col_A & Col_C>=Col_A-100)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Использование data.table

library(data.table)
setDT(df1)[(Col_A - Col_C) <= 100]

данных

df1 <- structure(list(User = structure(1:16, .Label = c("a", "b", "c", 
"d", "e", "f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q"
), class = "factor"), Col_A = c(1450L, 1450L, 1320L, 1300L, 1295L, 
1295L, 1295L, 1295L, 1295L, 1295L, 1295L, 1295L, 1250L, 1200L, 
1180L, 1030L), Col_B = c(1450L, 1450L, 1280L, 1300L, 1250L, 1295L, 
1240L, 1295L, 1295L, 1295L, 1295L, 1295L, 1250L, 1200L, 1180L, 
1030L), Col_C = c(1250L, 1440L, 1225L, 1190L, 1200L, 1250L, 1000L, 
1260L, 1260L, 1260L, 1190L, 1260L, 1220L, 1160L, 1070L, 990L)),
class = "data.frame", row.names = c(NA, -16L))
0 голосов
/ 24 марта 2020

Вы можете использовать subset

subset(df, (Col_A - Col_C) <= 100)

#   User Col_A Col_B Col_C
#2     b  1450  1450  1440
#3     c  1320  1280  1225
#5     e  1295  1250  1200
#6     f  1295  1295  1250
#8     h  1295  1295  1260
#9     j  1295  1295  1260
#10    k  1295  1295  1260
#12    m  1295  1295  1260
#13    n  1250  1250  1220
#14    o  1200  1200  1160
#16    q  1030  1030   990

Или с filter

dplyr::filter(df, (Col_A - Col_C) <= 100)

data

df <- structure(list(User = structure(1:16, .Label = c("a", "b", "c", 
"d", "e", "f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q"
), class = "factor"), Col_A = c(1450L, 1450L, 1320L, 1300L, 1295L, 
1295L, 1295L, 1295L, 1295L, 1295L, 1295L, 1295L, 1250L, 1200L, 
1180L, 1030L), Col_B = c(1450L, 1450L, 1280L, 1300L, 1250L, 1295L, 
1240L, 1295L, 1295L, 1295L, 1295L, 1295L, 1250L, 1200L, 1180L, 
1030L), Col_C = c(1250L, 1440L, 1225L, 1190L, 1200L, 1250L, 1000L, 
1260L, 1260L, 1260L, 1190L, 1260L, 1220L, 1160L, 1070L, 990L)),
class = "data.frame", row.names = c(NA, -16L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...