2017-08-14 105 views
0

信息的一個數據幀有兩個數據集,A & B,如下所示:填充在缺失的數據與來自另一

A <- data.frame(TICKER=c("00EY","00EY","00EY","00EY","00EY"), 
       CUSIP=c(NA,NA,"48205A10","48205A10","48205A10"), 
       OFTIC=c(NA,NA,"JUNO","JUNO","JUNO"), 
       CNAME=c(NA,NA, "JUNO", "JUNO","JUNO"), 
       ANNDATS=c("2015-01-13","2015-01-13","2015-01-13","2015-01-13","2015-01-13"), 
       ANALYS=c(00076659,00105887,00153117,00148921,00086659), 
       stringsAsFactors = F) 

B <- data.frame(TICKER=c("00EY","00EY","00EY","00EY"), 
       CUSIP=c("48205A10","48205A10","48205A10","48205A10"), 
       OFTIC=c("JUNO","JUNO",NA,NA), 
       CNAME=c("JUNO","JUNO", NA, NA), 
       ANNDATS=c("2015-01-13","2015-01-13","2015-01-13","2015-01-13"), 
       ANALYS=c(00076659,00105887,00153117,00148921), 
       stringsAsFactors = F) 

我怎樣才能填補缺失的數據在一個數據幀與信息從另一? (A & B數據集的長度不一樣)。

+0

您的示例數據中存在錯誤,我無法在R中運行它們(缺少字符串,ANALYS包含'.'而不是''')。另外考慮使用其他示例數據,因爲在此案例B已經您預期的結果。 – Florian

+0

是的,在這種情況下,B已經是我的預期結果,但樣本數據B是我的B數據集的一部分。我只取其中的一部分。麻煩的是,這兩個數據庫彼此之間信息不完整 – YXCHEN

+0

A = data.frame(TICKER = c(「00EY」,「00EY」,「00EY」,「00EY」),CUSIP = c(NA,NA,「48205A10」,「48205A10 「),OFTIC = C(NA,NA,」 JUNO 「 」JUNO「),CNAME = C(NA,NA, 」JUNO「, 」JUNO「),ANNDATS = C( 」2015年1月13日「,」 2015-01-13「,」2015-01-13「,」2015-01-13「),ANALYS = c(00076659,00105887,00153117,00148921),stringsAsFactors = F) – YXCHEN

回答

0

由於兩個數據集的長度可能不同,因此您需要一些可以連接的功能。因爲它似乎ANALYS是某種標識,我們可以用它來兩個data.frames連接在這個例子中。

首先我們確定df1(即A)中的所有錯誤並獲取它們的索引(行和列)。
然後,df1中的錯誤被替換爲df2中的值,對應於具有相同值ANALYS的行。如果此ID在df2中不可用,則該行將被跳過。

f <- function(df1, df2){ 
    missings <- sapply(df1, is.na) 
    missingsInd <- which(missings, arr.ind = T) 

    for(i in 1:nrow(missingsInd)){ 
    idOfMissing <- df1$ANALYS[missingsInd[i,1]] 
    correspondingLine <- df2[which(df2$ANALYS == idOfMissing), ] 
    if (nrow(correspondingLine) != 0) { 
     df1[missingsInd[i,1], missingsInd[i,2]] <- correspondingLine[1,missingsInd[i,2]] 
    } 
    } 
    df1 
} 
f(A, B) 
# TICKER CUSIP OFTIC CNAME ANNDATS ANALYS IRECCD 
# 1 00EY 48205A10 JUNO JUNO 2015-01-13 76659  1 
# 2 00EY 48205A10 JUNO JUNO 2015-01-13 105887  2 
# 3 00EY 48205A10 JUNO JUNO 2015-01-13 153117  1 
# 4 00EY 48205A10 JUNO JUNO 2015-01-13 148921  3 
# 5 00EY 48205A10 JUNO JUNO 2015-01-13 86659  4 

與兩個data.frames內NA S細胞會NA返回爲輸出。此外,這隻適用於ANALYS只在兩個數據幀中保存唯一值的情況。

+0

loki,感謝您的幫幫我。我可以進一步延長這個問題嗎? – YXCHEN

+0

現在,ANALYS有一個數據集相同的代碼,我們能做些什麼? – YXCHEN

+0

好的,感謝您的幫助 – YXCHEN

相關問題