2017-04-25 59 views
1

前幾天我發佈了this question,其中討論瞭如何在相關列中存在NAs時尋找並行最大值。但是,我意識到我並沒有提出正確的問題。我真正想要完成的是能夠找到一行的並行最大值,但只有當一個關鍵列等於NA時纔可以。僅當密鑰列是NA時纔在列之間查找並行最大值

下面是相同的數據。例如:

df1 
ID Score1 Score2 Score3 
1 2  3  1 
2 5  1  2 
3 1  6  8 
4 9  10  NA 

讓Score3變量代表this'key」列。也就是說,我想計算一個新變量Score4,它僅在Score3 = NA時代表3個得分變量中的最大分數,否則(當Score 3不等於NA時)代表Score3的值。

在這裏,我想看到的結果是,在應用一些功能FUN

df2<-FUN(df1) 
df2 
ID Score1 Score2 Score3 Score4 
1 2  3  1  1 
2 5  1  2  2 
3 1  6  8  8 
4 9  10  NA  10 

謝謝!

回答

0

使用data.table

df1 <- data.table(ID = c(1,2,3,4), Score1 = c(2,5,1,9), Score2 = c(3,1,6,10), Score3 = c(1,2,8,NA)) 

df1[, Score4 := ifelse(is.na(Score3), max(Score1, Score2), Score3), by = 1:nrow(df1)] 

df1 

    ID Score1 Score2 Score3 Score4 
1: 1  2  3  1  1 
2: 2  5  1  2  2 
3: 3  1  6  8  8 
4: 4  9  10  NA  10 
+0

感謝您的代碼。我之前沒有使用data.table,當我嘗試在我的實際數據上運行它時,出現此錯誤:unused argument(by = 1:nrow(df))。我確定我犯了一個簡單的錯誤,但我不確定在哪裏。有小費嗎? – lecreprays

+0

我不知道爲什麼你會得到。你是否嘗試運行我寫的內容? – ahly

0

對於後人,這裏是我想出了一個解決方案,以及:

df1<-df1%>% 
mutate(Score4_a=pmax(Score1,Score2,Score3,na.rm=T))%>% 
mutate(Score4_b=replace(Score3,is.na(Score3)==T,Score4_a))