请参阅 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 函数中的变量列表的主要内容,如果未能解决你的问题,请参考以下文章

GNU C中__attribute__妙用

更新条目时出错。有关详细信息,请参阅内部异常 [关闭]

javascript Javascript中的简单缓动函数 - 请参阅https://github.com/gre/bezier-easing

请参阅 Chrome 开发者工具中的 :hover 状态

请参阅浏览器中的打印 css [重复]

sh 请参阅apache容器中的卷大小和挂载绑定