考虑我有一个df
> editor
A B C D E F G H I J
User1 1 0 5 6 5 6 5 6 2 6
User2 0 5 4 6 4 5 5 1 7 5
我想在上面的行中存储第一个出现的第二个最大值的列名称。预期成绩
> editor
A B C D E F G H I J 2nd_highest
User1 1 0 5 6 5 6 5 6 2 6 C
User2 0 5 4 6 4 5 5 1 7 5 D
我尝试了edited$2nd_highest <- colnames(edited)[apply(edited, 1, which.max)+1]
但表现不好。
有任何想法吗 ?
这是一个主意。我们首先对unique
每行的值进行排序,然后提取第二个值。由于我们指定了decreasing = TRUE
,因此第二个值将是第二高的值。然后,我们将新列表中每个元素的第一个值用作列名称的索引。
ind_lst <- apply(df, 1, function(i) which(i == sort(unique(i), decreasing = TRUE)[2]))
df$highest.two <- names(df)[unlist(lapply(ind_lst, '[', 1))]
df
# A B C D E F G H I J highest.two
#User1 1 0 5 6 5 6 5 6 2 6 C
#User2 0 5 4 6 4 5 5 1 7 5 D
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句