对于每一行,按最高值对列名进行排序

乔迪·舒珀

我有一个看起来像这样的数据框。

df <- data.frame(name = c("bob", "john", "peter", "chris"),
    a = c(0, 0, 0, 0), b = c(2, 2, 1, 0), c = c(4, 0, 0, 1), d = c(0, 2, 1, 0), e = c(1, 0, 5, 0))
df

   name a b c d e
1   bob 0 2 4 0 1
2  john 0 2 0 2 0
3 peter 0 1 0 1 5
4 chris 0 0 1 0 0

对于每一行,我需要找到按值排序的列,如以下示例所示:

   name output
1   bob  c,b,e
2  john    b,d
3 peter  e,b,d
4 chris      c

我不知道该怎么做。

游戏

你可以做:

df <- data.frame(name = c("bob", "john", "peter", "chris"),
                 a = c(0, 0, 0, 0), b = c(2, 2, 1, 0), c = c(4, 0, 0, 1), d = c(0, 2, 1, 0), e = c(1, 0, 5, 0))
sortRowNames <- function(x) { x <- x[x!=0]; y <- sort(x, decr=TRUE); paste0(names(y), collapse=',') }
df$new <- apply(df[-1], 1, sortRowNames)
df
# > df
#    name a b c d e   new
# 1   bob 0 2 4 0 1 c,b,e
# 2  john 0 2 0 2 0   b,d
# 3 peter 0 1 0 1 5 e,b,d
# 4 chris 0 0 1 0 0     c

这是该函数的简短版本:

sortRow2 <- function(x) paste0(names(sort(x[x!=0], decr=TRUE)), collapse=',')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

对于每一行,输出具有最高值的前5列的列名,但忽略0

对于每一行,按desc顺序排序前5个值,并在那里获得列名

如何对数据框每一行的值进行排序并返回排序后的列名

按最高值排序

在各行中突出显示每一行的最高值

如何在表格的每一行中突出显示最高值?

Postgres:如何汇总一行以报告具有最高值的列名?

如何按每个组的最高值对组进行排序

按嵌套列表的最高值对字典进行排序

按最高值对数组中的对象进行排序

如何对表中的每一列进行排序并在SQL中显示每列中的最高值?

确定每一行在另一列中指定的组中是否具有最高值

如何获得熊猫中每一行的前 3 个最小和前 3 个最高值?

对于每一行,返回最小值的列名称-pandas

对于每一行,返回最大值的列名,同时删除联系

对于每一行,返回最大值的列名称

对于每一行,返回最小值的列名称-pandas

如何对 1000 行文件中的每 20 行进行排序,并仅将每个间隔中具有最高值的排序行保存到另一个文件中?

按特定評級的最高值對堆疊條進行排序

按 ID 而非最高值對 JSON 進行排序

如何按出现次数对每一行进行排序?

在数据框python的每一行中按字母顺序对单词进行排序

按降序对numpy多维数组的每一行进行排序

在R中按字母顺序对字符串的每一行进行排序

对于每一行,如果行值与条件匹配,则将列名添加到新列的列表中

获得每一行的最高绝对值(awk)

删除列中的最后一行或列中具有最高值的行

删除列中的最后一行或列中具有最高值的行

删除列中的最后一行或列中具有最高值的行