R:将缺少值的列添加到数据帧

R:将缺少值的列添加到数据帧,r,merge,dataframe,missing-data,R,Merge,Dataframe,Missing Data,我使用的是财务数据,主数据框的行名是日期 > assets[1:3,1:5] ALD SFN TCO KIM CTX 2003-01-03 48.1 23.98 23.5 23 22.34 2003-01-06 48.1 23.98 23.5 23 22.34 2003-01-07 48.1 23.98 23.5 23 22.34 我想在这里添加一个列,我想添加FOC$接近同一类型的数据框中的资产,但缺少一些日期: > FOC[1

我使用的是财务数据,主数据框的行名是日期

   > assets[1:3,1:5]
            ALD   SFN  TCO KIM   CTX
2003-01-03 48.1 23.98 23.5  23 22.34
2003-01-06 48.1 23.98 23.5  23 22.34
2003-01-07 48.1 23.98 23.5  23 22.34
我想在这里添加一个列,我想添加FOC$接近同一类型的数据框中的资产,但缺少一些日期:

   > FOC[1:3,1:2]
           Close Adj.Close
2003-01-03   510       510
2003-01-07   518       518
缺少的值应该是NA,因此看起来是这样的:

   > assets[1:3,1:6]
            ALD   SFN  TCO KIM   CTX FOC
2003-01-03 48.1 23.98 23.5  23 22.34 510
2003-01-06 48.1 23.98 23.5  23 22.34 NA
2003-01-07 48.1 23.98 23.5  23 22.34 518
有什么好办法吗?我通过执行以下操作,成功地对行执行了类似的操作

> rowtoadd <- list(ALD=18.1,...)
> dataframe[nrow(dataframe) + 1, names(rowtoadd)] <- rowtoadd
但我无法对列执行此操作。

您可以使用合并方法

我认为您正在使用xts时间序列对象。它们自动处理行名称。在helpmerge.xts中,有一个关键字参数join,可用于控制合并的发生方式。它默认为“外部”。例如:

dat = merge(assets[1:3,], FOC[,1:2], join='left')
> dat
            ALD   SFN  TCO KIM   CTX Close Adj.Close
2003-01-03 48.1 23.98 23.5  23 22.34   510       510
2003-01-06 48.1 23.98 23.5  23 22.34    NA        NA
2003-01-07 48.1 23.98 23.5  23 22.34   518       518

您可以先填写,然后再查找:

# Example data
df <- data.frame(list(split(rep(c(48.1, 23.98, 23.5, 23, 22.34), each = 3), rep(1:5, each = 3))))
colnames(df) <- c('ALD', 'SFN', 'TCO', 'KIM', 'CTX')
row.names(df) <- paste0('2003-01-0', c(3, 6, 7))
df <- df[order(as.POSIXct(row.names(df))), ] # This is important for cbind to work right
FOC <- data.frame(Close = c(510, 518), Adj.Close = c(510, 518))
row.names(FOC) <- paste0('2003-01-0', c(3, 7))

# Fill in NAs
FOC[setdiff(row.names(df), row.names(FOC)), ] <- NA
df <- cbind(df, FOC[order(as.POSIXct(row.names(FOC))), 1])
colnames(df)[length(df)] <- 'FOC'
按as.POSIXctrow.names.排序。。很重要,因为cbind不检查。如果没有它,我们会变得更糟

            ALD   SFN  TCO KIM   CTX FOC
2003-01-03 48.1 23.98 23.5  23 22.34 510
2003-01-06 48.1 23.98 23.5  23 22.34 518
2003-01-07 48.1 23.98 23.5  23 22.34 NA

我不认为那是OP想要的。问题是行名仍然被忽略。请参阅我回答中的最后一条评论我刚刚找到了我需要的:dat@Robert Krzyzanowski谢谢-我更新了回复,以明确merge for xts对必须是日期的行名称进行操作。
            ALD   SFN  TCO KIM   CTX FOC
2003-01-03 48.1 23.98 23.5  23 22.34 510
2003-01-06 48.1 23.98 23.5  23 22.34 518
2003-01-07 48.1 23.98 23.5  23 22.34 NA