2017-04-25 30 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))