对于以下数据框:
DF <- data.frame(Row=c(1,2,3,4,5),`2.04`=c(1,1,0,1,1),`2.05`=c(0,0,0,0,1),
`2.06`=c(1,0,0,0,1),`2.07`=c(1,0,0,0,1),`2.08`=c(1,1,1,0,0), check.names = F)
我想为每一行返回一个新的向量列名,该列名同时包含(a)相关行中大于0的值; (b)列名称具有满足条件a的所有值的最高值,例如:
DF <- data.frame(Row=c(1,2,3,4,5),'2.04'=c(1,1,0,0,1),'2.05'=c(0,0,0,0,1),
'2.06'=c(1,0,0,0,1),'2.07'=c(1,0,0,1,1),'2.08'=c(1,1,1,0,0),
Results=c(2.08,2.08,2.08,2.04,2.07)
因此,对于第2行,列2.04和2.08满足条件(a),并且只有2.08满足条件(b),因为2.08> 2.04。
dplyr
或data.table
将是首选。
答案 0 :(得分:3)
你也可以像这样使用max.col
DF$results <- names(DF[-1])[max.col(DF[-1], "last")]
DF
Row 2.04 2.05 2.06 2.07 2.08 results
1 1 1 0 1 1 1 2.08
2 2 1 0 0 0 1 2.08
3 3 0 0 0 0 1 2.08
4 4 1 0 0 0 0 2.04
5 5 1 1 1 1 0 2.07
max.col
返回每行最大值的列位置。它需要第二个参数ties.method,它设置为&#34; last&#34;这里是为了返回每行的最大列位置。这些列位置用于提取[
的列名称,然后将其转换为数字并放入向量中。
答案 1 :(得分:2)
我们可以逐行使用apply
并获取值大于0的所有列的names
并获取max
。
DF$Results <- apply(DF[-1], 1, function(x) max(names(which(x >0))))
DF
# Row 2.04 2.05 2.06 2.07 2.08 Results
#1 1 1 0 1 1 1 2.08
#2 2 1 0 0 0 1 2.08
#3 3 0 0 0 0 1 2.08
#4 4 1 0 0 0 0 2.04
#5 5 1 1 1 1 0 2.07