2016-05-03 140 views
3

我有一個N×M的數據框DF1,其中有許多值爲NA的行和列名稱。有第二個數據幀DF2(1 x M,所以真的可能是一個向量),其行名與DF1相同。我想用DF2填充DF1列中的缺失值。從另一個數據框填充data.frame中的缺失值

任何幫助將非常感激。

UDP:對不起,真的應該裝戴例子

數據幀爲NAS

> df = data.frame(matrix(rnorm(9), nrow=3)) 
> df[1,1] <- NA 
> df[2,2] <- NA 
> df[3,3] <- NA 
      X1   X2   X3 
1   NA -0.1364313   NA 
2 -0.7473972   NA -0.1662138 

替代值(同一行名,列名 - 無關

df2 = data.frame(c(1,2)) 
    c.1..2. 
1  1 
2  2 

預期的輸出:

  X1   X2   X3 
1   1 -0.1364313   1 
2 -0.7473972   2 -0.1662138 
+0

怎樣才能DF2填滿DF1如果爲M×1? DF1將具有與DF1相同的n倍的細胞 – cgage

+0

您需要舉例說明您的問題,包括樣品數據和預期的輸出 – SymbolixAU

+0

請提供帶有樣品數據的可重現代碼 – HubertL

回答

1

我想這是一種做法。首先,我創建一個新的data.framenew_df),只選擇匹配的行,然後對數據執行sapply以取代NA值。

set.seed(123) 
df = data.frame(matrix(rnorm(9), nrow=3)) 
df[1,1] <- NA 
df[2,2] <- NA 
df[3,3] <- NA 
df2 <- data.frame(c(1,2)) 
#create new data.frame 
new_df <- df[which(row.names(df2) == row.names(df)),] 
#use sapply() 
t(sapply(row.names(df2), FUN = function(x) 
    ifelse(is.na(new_df[row.names(new_df) == x,]), 
      df2[row.names(df2)== x,], 
      new_df[row.names(new_df) == x,]))) 

    [,1]  [,2]  [,3]  
1 1   0.07050839 0.4609162 
2 -0.2301775 2   -1.265061 

請注意,這會導致列名失去......這可能意味着有更好的方法來做到這一點。此外,我的數據不同,因爲我們沒有使用set.seed

1

你也可以做一個簡單的for循環,將照顧這:

for(i in 1:dim(df)[1]){ 
    df[i,is.na(df[i,])] <- df2[i,] 
} 
相關問題