创建一个新列,其列名称为 R 中*选定的*列数的每行的最大值

问题描述 投票:0回答:1
我有一个数据框,其中包含有关政党及其联盟在每个城镇获得的票数的信息。我还有其他列(总共 44 个),例如城镇的名称和编码、部分数量等。

我想要的是,通过选择

有限数量的列,在我的数据框中创建一个新列,其值是每行最大值的列名称。

我总共有 44 列,我想要从位置 7 到 29 的列范围,以及一些特定的列。因此,我不仅想要执行 7:29 的范围,还想要选择名为“A”和“B”的列(例如)。有人知道我该怎么做吗?

我已尝试使用其他答案中给出的代码,但它们不起作用。我试过:

cdmx <- cdmx %>% + mutate(winner = names(cdmx)[max.col(cdmx[, c(7:29, "coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt")], ties.method = "first")])
但是发生了这个错误(即使我总共有 44 列):

Error in `mutate()`: ℹ In argument: `winner = ...[]`. ℹ In row 1. Caused by error in `cdmx[, c(7:29, "coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt")]`: ! Can't subset columns that don't exist. ✖ Columns `7`, `8`, `9`, `10`, `11`, etc. don't exist.
我也尝试过以下代码:

cdmx$winner <- colnames(cdmx)[apply(cdmx[, c(7:num_columnas, "coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt")], 1, function(x) which.max(x, na.rm = TRUE))]
然而同样的错误发生了:

Error in cdmx[, c(7:29, "coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt")]: ! Can't subset columns that don't exist. ✖ Columns 7, 8, 9, 10, 11, etc. don't exist.
我查了很多网站,但没有找到解决方案。有人知道我该如何解决这个问题吗?谢谢!

r dataframe
1个回答
0
投票
由于您没有提供任何数据,所以很难给您确切的答案,但也许这会给您一个提示。

首先,您不能使用索引

名称对数据帧进行子集化,您必须选择其中一种方法。

您可以执行

mtcars[, c(3:6)]

mtcars[, c("gear", "hp")]
 但不能混合使用两者,即 
mtcars[, c(3:6, "gear", "hp")]
 会返回错误。所以就你而言,
cdmx[, c(7:29, "coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt")]
是不正确的。

如果您无法对这些列的列号进行硬编码,您可以使用

match

 找到它们。其次,您应该仅对您选择的那些列名称进行子集化。在您的代码中,您正在子集整个 
colnames(cdmx)
names(cdmx)

尝试以下方法 -

cols <- c("coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt") col_index <- match(cols, names(cdmx)) all_index <- c(7:29, col_index) cdmx$winner <- names(cdmx)[max.col(cdmx[, all_index], ties.method = "first")]
    
© www.soinside.com 2019 - 2024. All rights reserved.