Я пытаюсь заменить все вызовы subset
в моем скрипте с помощью dplyr
: Вот проблема, с которой я сталкиваюсь при попытке подмножества данных.Функция фильтра dplyr конфликтует с именем столбца
options(stringsAsFactors=F, width=175)
library(dplyr)
d <- data.frame(
col1 = c('a', 'b', 'c', 'd'),
col2 = c(1, 2, 3, 4))
f <- data.frame(
col1 = c('a', 'd', 'c'),
col2 = c('a', 'd', 'c'),
col3 = c('a', 'd', 'c'),
flag = c('blue', 'blue', 'red'))
filter(d, col1 %in% filter(f, flag == 'blue')$col1)
filter(d, col1 %in% filter(f, flag == 'blue')$col2)
filter(d, col1 %in% filter(f, flag == 'blue')$col3)
Выход:
> filter(d, col1 %in% filter(f, flag == 'blue')$col1)
[1] col1 col2
<0 rows> (or 0-length row.names)
> filter(d, col1 %in% filter(f, flag == 'blue')$col2)
Error: invalid subscript type 'double'
> filter(d, col1 %in% filter(f, flag == 'blue')$col3)
col1 col2
1 a 1
2 d 4
Похоже, это зависит от имени столбца. Ожидается ли это? Что я делаю не так ?
Спасибо!
Сессия:
R version 3.2.0 (2015-04-16)
Platform: x86_64-unknown-linux-gnu (64-bit)
Running under: CentOS release 6.6 (Final)
locale:
[1] LC_CTYPE=en_CA.UTF-8 LC_NUMERIC=C LC_TIME=en_CA.UTF-8 LC_COLLATE=en_CA.UTF-8 LC_MONETARY=en_CA.UTF-8 LC_MESSAGES=en_CA.UTF-8
[7] LC_PAPER=en_CA.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.4.3
loaded via a namespace (and not attached):
[1] lazyeval_0.1.10 magrittr_1.5 R6_2.1.1 assertthat_0.1 parallel_3.2.0 tools_3.2.0 DBI_0.3.1 Rcpp_0.12.0
Не могли бы вы описать то, что вывод, который вы пытаетесь достичь это? –
Я ожидаю получить результат самого последнего примера 'filter (d, col1% in% filter (f, flag == 'blue') $ col3)' – Melka
Очень сумасшедший, как мой вопрос был опущен. Это законная проблема, потенциально влияющая на результаты, получаемые от этой функции. – Melka