Существует ли быстрый способ фильтрации строк в data.frame более одного раза? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть фрейм данных xd, из которого я хочу отфильтровать данные для id = 1,2, но с 1 и 2, которые повторяются дважды.

set.seed(12)
xd <- data.frame(id = sort(sample(3,20, rep=TRUE)), y = rnorm(20))
fxd <- subset(xd, subset = id %in% c(1,2,1,2)) # doesn't work
str(fxd)

Однако, это не работает, потому что он выбирает id = 1 и id = 2 только один раз. Есть ли быстрый способ обойти это?

1 Ответ

0 голосов
/ 28 июня 2018

Аргумент subset функции subset ожидает логическое выражение, то есть вы можете выбирать из строк, упоминая TRUE/FALSE для каждой строки.

Если вы хотите повторить выделение, тогда можно использовать which. Который возвращает row-number, который может быть реплицирован. Следовательно, опция может быть такой:

set.seed(12)
xd <- data.frame(id = sort(sample(3,20, rep=TRUE)), y = rnorm(20))

fxd <- xd[rep(which(xd$id %in% c(1,2)), each = 2),]

fxd
#      id           y
# 1     1 -0.77771958
# 1.1   1 -0.77771958
# 2     1 -1.29388230
# 2.1   1 -1.29388230
# 3     1 -0.77956651
# 3.1   1 -0.77956651
# 4     1  0.01195176
# 4.1   1  0.01195176
# 5     1 -0.15241624
# 5.1   1 -0.15241624
# 6     1 -0.70346425
# 6.1   1 -0.70346425
# 7     1  1.18887916
# 7.1   1  1.18887916
# 8     1  0.34051227
# 8.1   1  0.34051227
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...