Как вставить даты из одного фрейма данных в другой? - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть фрейм данных с двумя столбцами, один из которых содержит даты, а другие числа.Моя цель - вставить даты из другого фрейма данных в столбец даты.Вот пример:

df <- data.frame(rep(as.Date("2001-01-01", origin = "1970-01-01"), 3),
                 c(1, 2, 3), 
                 stringsAsFactors = F)
ins <- data.frame(rep(as.Date("1999-01-01", origin = "1970-01-01"), 3), 
                  c(1, 2, 3),
                  stringsAsFactors = F)

Кадр данных, который я хочу получить:

> df_goal
       dates numbers
1 1999-01-01       1
2 2001-01-01       2
3 2001-01-01       3

Я попытался df[1, ] <- c(ins[1, 1], ins[1, 2]), но я получил следующую ошибку:

Ошибка в as.Date.numeric (значение): необходимо указать 'origin'

Однако, если в df пропущен числовой столбец, он работает:

df <- data.frame(rep(as.Date("2001-01-01"), 3), 
                 stringsAsFactors = F)
ins <- data.frame(rep(as.Date("1999-01-01"), 3), 
                  c(1, 2, 3),
                  stringsAsFactors = F) 
df[1, ] <- ins[1, 1]

Как заставить работать первый случай (df с двумя столбцами)?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

В качестве альтернативы:

df2 <- rbind(ins[1,], df[2:3,])

или

df2 <- df
df2[1,] <- ins[1,]
0 голосов
/ 21 сентября 2018

Я пытался df[1, ] <- c(ins[1, 1], ins[1, 2]), но я получил следующую ошибку:

Ошибка в as.Date.numeric (значение): необходимо указать 'origin'

Не используйте c - он преобразует свои аргументы, чтобы они имели один и тот же класс.

В этом случае c(ins[1, 1], ins[1, 2]) создает вектор даты;и когда это присваивается второму столбцу df, R пытается принудить этот столбец к дате, чтобы понять смысл присвоения, например as.Date(c(1, 2, 3)).

. Вместо этого вы можете сделать df[1,] <- ins[1, c(1,2)].


Примечание : не делайте такого рода вставки на основе номеров строк;Должен быть лучший способ достичь того, чего вы хотите, например, объединение / слияние.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...