Ошибка в mutate_impl (.data, dots): Ошибка оценки: Аргумент 2 должен быть символом типа - PullRequest
0 голосов
/ 11 мая 2018

Вопрос

Я хочу выполнить полное объединение двух фреймов данных, чтобы некоторые данные из наблюдений, которые имеют только одну строку и несколько векторов с данными в них, копировались в несколько строк всех наблюдений в другом фрейме данных. Два кадра данных соответствуют "site" и "lib."

library(data.table); library(magrittr); library(dplyr) 
df1<-structure(list(lib = c(10118L, 10118L, 10118L, 10104L, 10104L, 10104L                      ), site = c("yanglingshaanxi", "yanglingshaanxi", "yanglingshaanxi",                                   "tianjin", "tianjin", "tianjin"), y = c(1.896017347, 0.919531829,                                                                           1.150194405, 2.164771575, 1.060472222, 1.372680891), yr = c("1991", "1992", "1993", "2009", "2010",                                                                                                                                       "2012")), .Names = c(                                                                                                                                            "lib", "site", "y","yr"), class = c("data.table", "data.frame"), row.names = c(NA,                                                                                                                                                                                                                      -6L))
df2<-structure(list(yr = c(NA_integer_, NA_integer_), lib = c(10104L,                                                          10118L), site = c("tianjin", "yanglingshaanxi"), y = c(NA_real_,                                                                                                                 NA_real_)), .Names = c("yr", "lib", "site", "y"), class = "data.frame", row.names = c(10695L,                                                                                                                                                                                                       10698L))

y<-full_join(df1, df2,by=c("site","lib")) %>%
  mutate(
    yr=coalesce(yr.x,yr.y), #there are way more vectors that i'm actually coalescing than this it that matters
    y=coalesce(y.x,y.y)
    )  %>% 
  select(-c(
    yr.x,yr.y,
    y.x,y.y,
    lib  ))

Как заставить эту ошибку исчезнуть?

Error in mutate_impl(.data, dots) : 
  Evaluation error: Argument 2 must be type integer, not character.
In addition: Warning message:
package ‘bindrcpp’ was built under R version 3.3.3 

Я мог поклясться, что не трогал это, так как использовал его несколько месяцев назад - я сейчас загружаю посылку в неправильном порядке или что-то в этом роде? На что вообще ссылается «Аргумент 2»?

Подход до сих пор

Сначала пробовал загрузку plyr, затем dplyr; затем попытался загрузить только dplyr. Попробовал посмотреть на этот (непохожий) вопрос . Попытался найти то, на что ссылается сообщение об ошибке в ??mutate, пытаясь увидеть источник через

> getAnywhere(mutate)
A single object matching ‘mutate’ was found
It was found in the following places
  package:dplyr
  namespace:dplyr
with value

function (.data, ...) 
{
    UseMethod("mutate")
}

1 Ответ

0 голосов
/ 11 мая 2018

«Аргумент 2», по-видимому, просто относится к векторам, которые заново создаются в одном кадре данных и объединяются.Я начал думать, что это может быть так, поэтому я нашел векторы, которые были целыми и символическими в их соответствующих фреймах данных грубой силой, просто спустившись по списку из ~ 30 сливаемых векторов и комментируя их, выяснил, какие из них заставили код работать снова, когдаони были "выключены".Итак, это исправлено: замените "yr" на целое во фрейме с ошибками:

df1$yr<-as.integer(as.character(df1$yr))
...