如何将日期从一个数据框插入另一个数据框?

时间:2018-09-21 20:39:54

标签: r dataframe

我有一个包含两列的数据框,一列包含日期,另一列包含数字。我的目标是将另一个数据框中的日期插入日期列。这是一个示例:

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(value)中的错误:必须提供'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 :(得分:3)

  

我尝试了df[1, ] <- c(ins[1, 1], ins[1, 2]),但是遇到以下错误:

     
    

as.Date.numeric(value)中的错误:必须提供'origin'

  

不要使用c -它会转换其参数,使它们具有相同的类。

在这种情况下,c(ins[1, 1], ins[1, 2])是一个日期向量;并将其分配给df的第二列时,R会尝试强制使该列保持最新状态以使分配有意义,例如as.Date(c(1, 2, 3))

您可以改为执行df[1,] <- ins[1, c(1,2)]


旁注:请勿根据行号进行这种插入;必须有更好的方法来实现您的目标,例如加入/合并。

答案 1 :(得分:0)

或者:

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

df2 <- df
df2[1,] <- ins[1,]