R - Как мы можем удалить строки на основе логического аргумента между двумя значениями столбцов - PullRequest
1 голос
/ 27 марта 2020

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

test.1 <- c("A", "B", "C", "D")
test.2 <- c("2009-02", "2009-04", "2010-01", "2011-02")
test.3 <- c("2009-02", "2009-08", "2010-01", "2013-06")
test.data <- data.frame(test.1, test.2, test.3)

, который дает:

test.1  test.2  test.3
1      A 2009-02 2009-02
2      B 2009-04 2009-08
3      C 2010-01 2010-01
4      D 2011-02 2013-06

Я хотел бы удалить строки, где test.2 и test.3 не равны, т.е. второй и четвертый ряды. Я попытался с дублированной функцией, поскольку обнаружил, что

test.data.2 = test.data[!duplicated(test.data[,c('test.2', 'test.3')]),]

удалит строки, где test.2 = test.3. Поэтому я удаляю "!" следующим образом:

test.data.2 = test.data[duplicated(test.data[,c('test.2', 'test.3')]),]

но это не работает. Есть ли у вас какие-либо другие предложения? Большое спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 27 марта 2020

С tidyverse:

library(tidyverse)

test.data %>%
  filter(test.2 == test.3)

Или база R:

test.data[test.data$test.2 == test.data$test.3,]
1 голос
/ 27 марта 2020

Вы можете создать новый фрейм данных, в котором только значения, где test.2 и test.3 одинаковы:

test.data.2 <- test.data[test.data$test.2 == test.data$test.3,]

Аналогично, вы можете отфильтровать значения, если они не совпадают:

test.data.2 <- test.data[-which(test.data$test.2 != test.data$test.3),]
1 голос
/ 27 марта 2020

Мы можем использовать subset для подстановки строк из base R

subset(test.data, test.2 == test.3)

Или используя dplyr

library(dplyr)
test.data %>%
      slice(which(test.2 == test.3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...