2015-11-26 3 views
-1

У меня есть dataframe «А» с помощью следующей формыR - замена селективные на строки кадра данных

log P1 P2 P3 P4 P5 Method Round #TSamples #Samples0 #Samples1 FP TN TP FN Time Det_Time 
data1 2 0 0 0 LOF  1 3 3 0 0 3 0 0 0.00800108909606934 1 
data1 2 0 0 0 Mahalanobis 1 3 3 0 0 3 0 0 0.00100016593933105 1 
data1 2 0 0 0 Cook 1 3 3 0 0 3 0 0 0.00900101661682129 1 
    ........... 

И еще dataframe «B» с

log P1 P2 P3 P4 P5 Method Round #TSamples #Samples0 #Samples1 FP TN TP FN Time Det_Time 
data1 2 0 0 0 Mahalanobis 1 3 3 0 0 3 0 0 0.00200080871582031 1 
data1 3 0 0 0 Mahalanobis 1 3 3 0 0 3 0 0 0.000999927520751953 1 

В принципе, я хотел бы заменить строки «FP», «TN», «TP» и «FN» из кадра данных A из блоков данных B, когда столбцы «P1», «P2», «P3», «P4», «P5», «Method »и« Round »в обоих кадрах A и B.

Рауля

+3

Попробуйте с 'merge' – akrun

+0

Я попытался, но это добавляет дополнительные столбцы?. – Ruser

+0

Да, это именно то, что вам нужно. – zx8754

ответ

0

Что-то вроде этого:

require(sqldf) 

    C <- sqldf('select A.log, A.P1, A.P2, A.P3, A.P4, A.P5, A.Method, A.Round, "A.#TSamples", "A.#Samples0", "A.#Samples1", B.FP, B.TN, B.TP, B.FN, A.Time, A.Det_Time 
       from A 
       inner join B on (A.log = B.log and 
           A.P1 = B.P1 and 
           A.P2 = B.P2 and 
           A.P3 = B.P3 and 
           A.P4 = B.P4 and 
           A.P5 = B.P5 and and 
           A.Method = B.Method and 
           A.Round = B.Round)    
       ') 

    C <- rbind(A,C) 

    C <- C[!duplicated(C[c("log", "P1", "P2", "P3", "P4", "P5", "Method", "Round", "#TSamples", "#Samples0", "#Samples1", "Time", "Det_Time")]),] 
+0

Он делает. Однако остальные данные из столбцов FP, TN, TP и FN вставляют NA. Зачем? – Ruser

+0

@Ruser - Я отредактировал мой ответ, он работает сейчас? – Berecht

+0

Ошибка в sqliteSendQuery (con, statement, bind.data): ошибка в заявлении: неоднозначное имя столбца: FP – Ruser

Смежные вопросы