2016-05-03 11 views
3

私は行と列の名前を持つN x MデータフレームDF1を持っています。値の多くはNAです。 DF1と同じ行名を持つ第2のデータフレームDF2(1×M、したがって実際にはベクトルになり得る)がある。私はDF2を使ってDF1列の欠損値を補充したいと思っています。別のdata.frameからdata.frameの欠損値を埋めてください

本当にありがとうございます。

UDPの申し訳ありませんが、本当に例のNA

DATAFRAME

> 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を埋めることができますか? 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

ます。また、このの世話をするループのための簡単な操作を行うことができます。それはM×1であれば

for(i in 1:dim(df)[1]){ 
    df[i,is.na(df[i,])] <- df2[i,] 
} 
関連する問題