2014-04-18 81 views
0

我正在使用財務數據,並且我的主數據框的行名稱是日期。R:將缺失值的列添加到數據框中

> 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 

但我不能這樣做的列。

回答

0

您可以使用合併方法。

我認爲你使用的是xts時間序列對象。這些自動處理行名稱。從help(merge.xts),您可以使用關鍵字參數加入來控制合併的發生方式。它默認爲'外部'。例如:

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 
+0

我不認爲這是OP所尋找的。問題是行名仍然被忽略。 (請參閱我的回答中的最後一條評論) –

+0

我剛剛找到我需要的東西:dat < - merge(assets,FOC,by =「row.names」,all.x = T)做的伎倆,我不知道我可以使用all.x = T來獲得NA。謝謝您的幫助。 – Lemko

+0

@Robert Krzyzanowski謝謝 - 我更新了回覆,以明確合併xts對行名進行操作(必須是日期)。 – slushy

0

你可以填補他們在第一,然後cbind:

# 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' 

結果:因爲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 NA 
2003-01-07 48.1 23.98 23.5 23 22.34 518 

排序as.POSIXct(row.names(..))是很重要的。沒有它,我們會得到

  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 
相關問題