请参阅 R 中 sum 函数中的变量列表
Posted
技术标签:
【中文标题】请参阅 R 中 sum 函数中的变量列表【英文标题】:Refer to list of variables in sum function in R 【发布时间】:2022-01-18 19:50:24 【问题描述】:我有一个类似于以下示例的表:
Person | Date | VarA | VarD | VarC | VarB |
---|---|---|---|---|---|
Erik | 2020-12-31 | 5 | 7 | 3 | 12 |
Erik | 2021-03-31 | 6 | 4 | 4 | 15 |
Simon | 2020-12-31 | 9 | 8 | 5 | 17 |
Simon | 2021-03-31 | 11 | 2 | 3 | 16 |
表中的变量数量可能会有所不同。我想创建一个通用的 R 脚本,可用于计算分子和分母中任意数量变量之和之间的比率。使用 Var、P1 和 P2 指定并包含在 R 脚本中的变量列表以及应在分子和分母中求和的变量列表(参见下面的代码)。
我写了以下代码:
#Var is replaced by a list of all variables, in this case "VarA, VarD, VarC, VarB"
Variablelist <- str_split("Var", ", ", simplify = TRUE)
#P1 and P2 are replaced by lists of the positions of the variables in Variablelist that should be included, for example "1, 3, 4"
NumeratorSum <- Variablelist[c(P1)]
DenominatorSum <- Variablelist[c(P2)]
InputDataSet <- InputDataSet %>%
dplyr::rowwise() %>%
dplyr::mutate(ResultRatio = sum(NumeratorSum, na.rm=TRUE) / sum(NumeratorSum, na.rm=TRUE))
OutputDataSet <- InputDataSet %>%
dplyr::select(Person, Date, ResultRatio)
例如,如果 P1="1, 3, 4" 和 P2="2, 3" 那么 ResultRatio 应该等于 sum(VarA, VarC, VarB)/sum(VarD, VarC) .
但是,代码不起作用,我需要帮助来了解如何在 sum 函数中引用列表 NumeratorSum 和 DenominatorSum,以便对表中与这些列表中的元素同名的列求和。
【问题讨论】:
【参考方案1】:假设 DF 是末尾注释中的输入数据帧,输入 v、P1 和 P2 如下所示,使用 rowSums。不使用任何包。
v <- c("VarA", "VarB", "VarC", "VarD")
P1 <- c(1, 3, 4)
P2 <- 2:3
rowSums(DF[v[P1]]) / rowSums(DF[v[P2]])
## [1] 1.0000000 0.7368421 1.0000000 0.8421053
# check
(DF$VarA + DF$VarC + DF$VarD) / (DF$VarB + DF$VarC)
## [1] 1.0000000 0.7368421 1.0000000 0.8421053
如果 v、P1 和 P2 用逗号分隔的字符串表示 vs、p1s 和 p2s 则先使用扫描:
vs <- "VarA, VarB, VarC, VarD"
v <- scan(text = vs, what = "", quiet = TRUE, sep = ",", strip.white = TRUE)
v
## [1] "VarA" "VarB" "VarC" "VarD"
p1s <- "1, 3, 4"
P1 <- scan(text = p1s, quiet = TRUE, sep = ",")
P1
## [1] 1 3 4
p2s <- "2, 3"
P2 <- scan(text = p2s, quiet = TRUE, sep = ",")
P2
## [1] 2 3
注意
DF <-
structure(list(Person = c("Erik", "Erik", "Simon", "Simon"),
Date = c("2020-12-31", "2021-03-31", "2020-12-31", "2021-03-31"
), VarA = c(5L, 6L, 9L, 11L), VarD = c(7L, 4L, 8L, 2L), VarC = c(3L,
4L, 5L, 3L), VarB = c(12L, 15L, 17L, 16L)), class = "data.frame", row.names = c(NA,
-4L))
【讨论】:
以上是关于请参阅 R 中 sum 函数中的变量列表的主要内容,如果未能解决你的问题,请参考以下文章
javascript Javascript中的简单缓动函数 - 请参阅https://github.com/gre/bezier-easing