Как удалить строки, если коэффициент в столбце A соответствует коэффициенту в столбце B - PullRequest
0 голосов
/ 02 июня 2019

У меня есть датафрейм с 9 миллионами строк и 3 переменными. Этими тремя переменными являются источник (коэффициент w / 46 уровней), пункт назначения (коэффициент w / 46 уровней) и пропускная способность (int).

Упрощенная версия моего фрейма данных выглядит так: https://ibb.co/0p7g37B

Я хочу удалить строки, где Origin равен Destination (например, 12th = 12th или 16th = 16th)

Я хочу, чтобы мой вывод выглядел так: https://ibb.co/k6h7qc2

DATA:

df <- structure(list(Origin = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L
  ), .Label = c("12th", "16th"), class = "factor"), Destination = structure(c(1L, 
  1L, 4L, 4L, 2L, 3L, 5L), .Label = c("12th", "16th", "CIVC", "COLS", 
  "FTVL"), class = "factor"), Throughput = c(1L, 2L, 1L, 4L, 2L, 
  1L, 7L)), class = "data.frame", row.names = c(NA, -7L))

Ответы [ 3 ]

1 голос
/ 02 июня 2019

Ответы Бруно и Нитеша дают желаемый результат, но я думаю, что нет необходимости в дополнительных выражениях mutate. Вы можете напрямую отфильтровать результаты:

df <- df %>% filter(Origin != Destination)

Еще одна вещь: чтобы иметь возможность сравнивать две факторные переменные, они должны иметь одинаковые уровни. Вы должны редактировать уровни исходной или целевой переменной таким образом, чтобы оба они имели одинаковые уровни.

0 голосов
/ 02 июня 2019

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

library(tidyverse)
df <- tribble(~Origin,~Destination,~Throughput,
             "12th","12th",1,
             "12th","12th",2,
             "12th","COLS",1,
             "12th","COLS",4,
             "16th","16th",2,
             "16th","CIVC",1,
             "16th","FTVL",7)

df %>%
  mutate(is_equal = if_else(Origin == Destination,
                                 TRUE,
                                 FALSE)) %>% 
  filter(is_equal == FALSE) %>% 
  select(-is_equal)
0 голосов
/ 02 июня 2019

Вы можете создать фиктивную переменную, имеющую строковые значения 1 и 0. 1 в случае, если значения источника и назначения совпадают, иначе 0. Затем вы можете отфильтровать строки, в которых у вас есть строковое значение 0, во вновь созданной фиктивной переменной.do это указано ниже:

data = read.csv("filepath of csv file.csv")
data$newdummy = ifelse(data$Origin == data$Destination, '1' ,'0')
data1 <- data[data$newdummy == '0',]

Позже вы можете удалить столбец, в котором вы создали фиктивные значения -

data1 <- data1[-4] 

если позиция нового фиктивного столбца 3-я.

Надеюсь, это поможет.

...