Вопрос
Я хочу выполнить полное объединение двух фреймов данных, чтобы некоторые данные из наблюдений, которые имеют только одну строку и несколько векторов с данными в них, копировались в несколько строк всех наблюдений в другом фрейме данных. Два кадра данных соответствуют "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")
}