gpt4 book ai didi

r - 如何在不对列名进行硬编码的情况下使用 dplyr 将函数逐行应用到数据框中

转载 作者:行者123 更新时间:2023-12-04 11:35:51 24 4
gpt4 key购买 nike

我有以下数据框:

dat <- structure(list(setosa = c(50L, 0L, 0L), versicolor = c(0L, 11L, 
39L), virginica = c(0L, 36L, 14L)), .Names = c("setosa", "versicolor",
"virginica"), row.names = c("1", "2", "3"), class = "data.frame")

dat
#> setosa versicolor virginica
#> 1 50 0 0
#> 2 0 11 36
#> 3 0 39 14

这是我通过将列名称硬编码到其中来计算分数的当前代码:

library(dplyrj)
dat %>%
rowwise() %>%
# here I hard code the column names into the score
mutate(score = max(c(setosa,versicolor, virginica)/ sum(c(setosa, versicolor, virginica))))

产生:

# A tibble: 3 x 4
setosa versicolor virginica score
<int> <int> <int> <dbl>
1 50 0 0 1.00
2 0 11 36 0.766
3 0 39 14 0.736

我想做的是计算每个分数,但不对列名进行硬编码。

如何实现?

最佳答案

一个简洁的 base R 选项是

dat$score <- do.call(pmax, dat)/rowSums(dat)

tidyverse中我们可以做到

library(tidyverse)
dat %>%
mutate(score = do.call(pmax, .)/reduce(., `+`))
# setosa versicolor virginica score
#1 50 0 0 1.0000000
#2 0 11 36 0.7659574
#3 0 39 14 0.7358491

关于r - 如何在不对列名进行硬编码的情况下使用 dplyr 将函数逐行应用到数据框中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49251057/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com