gpt4 book ai didi

r - 有没有一种快速计算多列乘法结果的方法,但根据 NA 值具有不同的比例?

转载 作者:行者123 更新时间:2023-12-04 02:30:26 25 4
gpt4 key购买 nike

我正在尝试根据 NA 值以不同比例获得 A、B 和 C 列相乘的结果。这是一个可重现的例子:

data <- data.frame(A = c(NA, 3, NA, 5),
B = c(NA, NA, 10, 2),
C = c(12, 14, 5, 18))

比例:

proportion <- data.frame(id = c("A", "B", "C"),
proportion1 = c(1, NA, NA),
proportion2 = c(NA, 1, NA),
proportion3 = c(NA, NA, 1),
proportion4 = c(0.25, 0.75, NA),
proportion5 = c(0.4, NA, 0.6),
proportion6 = c(NA, 0.33, 0.67),
proportion7 = c(0.35, 0.2, 0.45))

我可以用下面的代码得到我想要的结果。但是,我找不到如何为更大的数据集(例如 5 个或更多初始组)执行此操作。

library(dplyr)
data_results <- data %>% mutate(result = case_when(is.na(B) & is.na(C) ~ A,
is.na(A) & is.na(C) ~ B,
is.na(A) & is.na(B) ~ C,
is.na(C) ~ 0.25 * A + 0.75 * B,
is.na(B) ~ 0.4 * A + 0.6 * C,
is.na(A) ~ 0.33 * B + 0.67 * C,
TRUE ~ 0.35 * A + 0.2 * B + 0.45 * C))

示例:在 data_results 中,第 3 行对应于 proportion6。于是我们得到

0.33 * 10 + 0.67 * 5 = 6.65

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

这是一个基本的 R 选项

x <- apply(!is.na(data),1,function(v) toString(which(v,arr.ind = TRUE)))
y <- apply(!is.na(proportion[-1]),2,function(v) toString(which(v,arr.ind = TRUE)))
data$results <- colSums(t(data)*proportion[1+match(x,y)],na.rm = TRUE)

给出

> data
A B C results
1 NA NA 12 12.00
2 3 NA 14 9.60
3 NA 10 5 6.65
4 5 2 18 10.25

关于r - 有没有一种快速计算多列乘法结果的方法,但根据 NA 值具有不同的比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64564378/

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