以下是示例数据:
我将会尝试翻译您的内容。需要在数据框中创建一列(投票),该列基于ID1、ID2、ID3组的wt的argmax。例如,在示例数据的第3行中,"B"的权重总和为0.4,"C"的权重总和为0.6,因此投票="C"。
结果将类似于:
在出现平局的情况下(例如示例中的第4行),只需选择任意一个ID值。有人可以提供解决方案吗?
df <- data.frame("ID1" = c("A","A","B","C"),
"Wt1" = c(0.8,0.6,0.4,0.5),
"ID2" = c("B","A","C","B"),
"Wt2" = c(0.1,0.4,0.5,0.5),
"ID3" = c("C",NA,"C",NA),
"Wt3" = c(0.1,NA,0.1,NA))
我将会尝试翻译您的内容。需要在数据框中创建一列(投票),该列基于ID1、ID2、ID3组的wt的argmax。例如,在示例数据的第3行中,"B"的权重总和为0.4,"C"的权重总和为0.6,因此投票="C"。
结果将类似于:
ID1 Wt1 ID2 Wt2 ID3 Wt3 vote
1 A 0.8 B 0.1 C 0.1 A
2 A 0.6 A 0.4 <NA> NA A
3 B 0.4 C 0.5 C 0.1 C
4 C 0.5 B 0.5 <NA> NA C
在出现平局的情况下(例如示例中的第4行),只需选择任意一个ID值。有人可以提供解决方案吗?
df[is.na(df)] <- -Inf;df$vote <- df[c(T,F)][cbind(1:nrow(df), max.col(df[c(F,T)]))]
可能有效。你会收到因为因子变量而产生的警告,但对于这个示例来说它是有效的。如果需要进一步解释我可以说明。 该代码意思为将数据框df中的空值设为负无穷,并根据行中最大的非空值所在的列索引,在df的vote列中填充相应的值。虽然该代码可能会触发有关因子变量的警告,但对于提供的示例数据而言,它是可行的。如果需要更详细的解释,请让我知道。 - Pierre L