如何使用apply()系列识别行中最大值的列名称

克里斯·鲁勒曼

我想在数据框中添加一列,以说明数据框中跨行计算出的最大值所在的那些列的名称。

假设我有这个数据框:

set.seed(123)
df <- data.frame(
  V1 = rnorm(10),
  V2 = rnorm(10),
  V3 = rnorm(10)
)

现在创建一个新列,以标识我使用的每行的最大值apply

df$Max <- apply(df[, 1:3], 1, max, na.rm = TRUE)

这很好用:

df
            V1         V2         V3       Max
1  -0.56047565  1.2240818 -1.0678237 1.2240818
2  -0.23017749  0.3598138 -0.2179749 0.3598138
3   1.55870831  0.4007715 -1.0260044 1.5587083
4   0.07050839  0.1106827 -0.7288912 0.1106827
5   0.12928774 -0.5558411 -0.6250393 0.1292877
6   1.71506499  1.7869131 -1.6866933 1.7869131
7   0.46091621  0.4978505  0.8377870 0.8377870
8  -1.26506123 -1.9666172  0.1533731 0.1533731
9  -0.68685285  0.7013559 -1.1381369 0.7013559
10 -0.44566197 -0.4727914  1.2538149 1.2538149

现在来了困难的部分:我想添加另一列来命名最大值所在的列。到目前为止,我已经尝试了以下扩展apply语句:

df$Location <- apply(df[, 1:3], 1, function(x) names(x[match(df[,4], x)]))

它似乎确实捕获了名称,但将它们分散在大量其他列中:

df
            V1         V2         V3       Max Location.1 Location.2 Location.3 Location.4 Location.5
1  -0.56047565  1.2240818 -1.0678237 1.2240818         V2       <NA>       <NA>       <NA>       <NA>
2  -0.23017749  0.3598138 -0.2179749 0.3598138       <NA>         V2       <NA>       <NA>       <NA>
3   1.55870831  0.4007715 -1.0260044 1.5587083       <NA>       <NA>         V1       <NA>       <NA>
4   0.07050839  0.1106827 -0.7288912 0.1106827       <NA>       <NA>       <NA>         V2       <NA>
5   0.12928774 -0.5558411 -0.6250393 0.1292877       <NA>       <NA>       <NA>       <NA>         V1
6   1.71506499  1.7869131 -1.6866933 1.7869131       <NA>       <NA>       <NA>       <NA>       <NA>
7   0.46091621  0.4978505  0.8377870 0.8377870       <NA>       <NA>       <NA>       <NA>       <NA>
8  -1.26506123 -1.9666172  0.1533731 0.1533731       <NA>       <NA>       <NA>       <NA>       <NA>
9  -0.68685285  0.7013559 -1.1381369 0.7013559       <NA>       <NA>       <NA>       <NA>       <NA>
10 -0.44566197 -0.4727914  1.2538149 1.2538149       <NA>       <NA>       <NA>       <NA>       <NA>
   Location.6 Location.7 Location.8 Location.9 Location.10
1        <NA>       <NA>       <NA>       <NA>        <NA>
2        <NA>       <NA>       <NA>       <NA>        <NA>
3        <NA>       <NA>       <NA>       <NA>        <NA>
4        <NA>       <NA>       <NA>       <NA>        <NA>
5        <NA>       <NA>       <NA>       <NA>        <NA>
6          V2       <NA>       <NA>       <NA>        <NA>
7        <NA>         V3       <NA>       <NA>        <NA>
8        <NA>       <NA>         V3       <NA>        <NA>
9        <NA>       <NA>       <NA>         V2        <NA>
10       <NA>       <NA>       <NA>       <NA>          V3

如何在单个列中整齐地收集名称df$Location

阿克伦

我们可以用 max.col

df$Location <- names(df)[1:3][max.col(df[1:3], 'first')]

如果我们要使用 apply

 apply(df[1:3], 1, function(x) names(x)[which.max(x)])

或者,如果需要与“ max”列匹配,请使用==,并将其子集names

apply(df, 1, function(x) names(x)[1:3][x[-length(x)] == x[length(x)]])

在OP的代码中,它仅在前3列与行循环,而在match每行的第4列进行

  apply(df[, 1:3], 1, function(x) match(x, df[,4]))

并且由于有3个元素,因此将导致3行。在OP的代码中,参数是相反的,因此,每一行的长度等于nrow

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取数据成名python中最大值的列名?

来自分类Dev

返回行中3个最大值的列名称

来自分类Dev

熊猫idxmax()获取对应于行中最大值的列名

来自分类Dev

返回基于记录中最大值的列名

来自分类Dev

如何识别每行最大值的列

来自分类Dev

查找多列的最大值(按行)和列的名称,其中最大值。发生的值 (T-SQL)

来自分类Dev

根据各列之间的比较,将最大值的列名称分配给行

来自分类Dev

查找给定列中最常包含最大值的行

来自分类Dev

如何返回数组中最大值的位置

来自分类Dev

如何获取fortran中最大值的位置?

来自分类Dev

如何获取数组中最大值的索引?

来自分类Dev

如何计算 QuickBase 中最大值的平均值?

来自分类Dev

如何使用Python获取具有最大值的行?

来自分类Dev

如何获取一行中的最大值以及列名

来自分类Dev

返回表示每个组中最大值的索引的一系列数字位置

来自分类Dev

获取保存行最大值的列名

来自分类Dev

获取组中最大值的ID

来自分类Dev

返回数组中最大值的索引

来自分类Dev

获取矩阵中最大值的位置

来自分类Dev

选择组中最大值的记录

来自分类Dev

返回数组中最大值的索引

来自分类Dev

熊猫中最大值的列标签

来自分类Dev

使用系列中的行索引和列名称捕获DataFrame值

来自分类Dev

SQL:使用最大值过滤行

来自分类Dev

如何使用pivote从三列的行中找出最大值,即三列中的最大值

来自分类Dev

大熊猫:查找列名和值,每一行的最大值(和第二最大值)

来自分类Dev

熊猫:查找列名和值,每一行的最大值(和第二最大值)

来自分类Dev

如何通过使用“Case”语句比较多列中的值来检索具有最大值的列名

来自分类Dev

SQL Server中选择一行的最大值和最大值的列名作为两列

Related 相关文章

  1. 1

    如何获取数据成名python中最大值的列名?

  2. 2

    返回行中3个最大值的列名称

  3. 3

    熊猫idxmax()获取对应于行中最大值的列名

  4. 4

    返回基于记录中最大值的列名

  5. 5

    如何识别每行最大值的列

  6. 6

    查找多列的最大值(按行)和列的名称,其中最大值。发生的值 (T-SQL)

  7. 7

    根据各列之间的比较,将最大值的列名称分配给行

  8. 8

    查找给定列中最常包含最大值的行

  9. 9

    如何返回数组中最大值的位置

  10. 10

    如何获取fortran中最大值的位置?

  11. 11

    如何获取数组中最大值的索引?

  12. 12

    如何计算 QuickBase 中最大值的平均值?

  13. 13

    如何使用Python获取具有最大值的行?

  14. 14

    如何获取一行中的最大值以及列名

  15. 15

    返回表示每个组中最大值的索引的一系列数字位置

  16. 16

    获取保存行最大值的列名

  17. 17

    获取组中最大值的ID

  18. 18

    返回数组中最大值的索引

  19. 19

    获取矩阵中最大值的位置

  20. 20

    选择组中最大值的记录

  21. 21

    返回数组中最大值的索引

  22. 22

    熊猫中最大值的列标签

  23. 23

    使用系列中的行索引和列名称捕获DataFrame值

  24. 24

    SQL:使用最大值过滤行

  25. 25

    如何使用pivote从三列的行中找出最大值,即三列中的最大值

  26. 26

    大熊猫:查找列名和值,每一行的最大值(和第二最大值)

  27. 27

    熊猫:查找列名和值,每一行的最大值(和第二最大值)

  28. 28

    如何通过使用“Case”语句比较多列中的值来检索具有最大值的列名

  29. 29

    SQL Server中选择一行的最大值和最大值的列名作为两列

热门标签

归档