- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下两个数据框:
df <- data.frame(REGION = c("REG01","REG02","REG03","REGSUM"),
INDUSTRY = c("INDU01","INDU01","INDU01","INDU01"),
VALUE = c(NA,10,NA,30))
和:
df2 <- data.frame(REGION = c("REG01","REG02","REG03","REGSUM"),
INDUSTRY = c("INDU01","INDU01","INDU01","INDU01"),
VALUE = c(5,15,20,40))
我想做以下计算:如果 df
中的值等于 NA,那么我想根据 df2
中的份额来估计它。因为我知道 df
中的总和,所以我知道我必须分配值 df[REGSUM,INDU01] - df[REG02,INDU01] = 30 - 10 = 20
在 df
中具有 NA 的两个元素之间。
然后它应该将 df2
中的相同元素除以具有 NA 的元素的总和:
df2_share[REG01,INDU01] = 5 / (5 + 20) = 0.2
df2_share[REG03,INDU01] = 20 / (5 + 20) = 0.8
此份额应用于估计 df1
中的 NA
。所以我最终会得到以下数据框:
REGION INDUSTRY VALUE
1 REG01 INDU01 0.2 * 20 = 4
2 REG02 INDU01 10
3 REG03 INDU01 0.8 * 20 = 16
4 REGSUM INDU01 30
我可以在 R 中做到这一点吗(我的数据框中有很多地区和行业)。
最佳答案
这是一个方法。
在 df
中对既不是 NA
也不是 "REGSUM"
的值求和。使用此值计算分配给 NA
值的总数。然后获取 df2
中对应于 NA
条目的值,并计算要分配的比例。
not_na_values <- sum(df$VALUE[df$REGION != "REGSUM"], na.rm = TRUE)
to_assign <- df$VALUE[df$REGION == "REGSUM"] - not_na_values
na <- is.na(df$VALUE)
numer <- df2$VALUE[na]
denom <- sum(numer)
df$VALUE[na] <- numer/denom * to_assign
df
# REGION INDUSTRY VALUE
#1 REG01 INDU01 4
#2 REG02 INDU01 10
#3 REG03 INDU01 16
#4 REGSUM INDU01 30
下面的函数概括了上面的代码,用于许多行业的 data.frames。它的工作原理是按行业拆分输入 data.frames 并lapply
之前的代码,作为每个拆分列表成员的函数编写。最后它重新组装这些子数据帧并返回给调用者。
assign_na_values <- function(x, y,
region_col = "REGION",
industry_col = "INDUSTRY",
value_col = "VALUE",
regsum = "REGSUM") {
f <- function(x, y, region_col, value_col, regsum){
i <- x[[region_col]] != regsum
not_na_values <- sum(x[[value_col]][ i ], na.rm = TRUE)
to_assign <- x[[value_col]][ !i ] - not_na_values
na <- is.na(x[[value_col]])
numer <- y[[value_col]][na]
denom <- sum(numer)
x[[value_col]][na] <- numer/denom * to_assign
x
}
sp_x <- split(x, x[[industry_col]])
sp_y <- split(y, y[[industry_col]])
res <- lapply(seq_along(sp_x), function(i){
f(sp_x[[i]], sp_y[[i]], region_col, value_col, regsum)
})
res <- do.call(rbind, res)
row.names(res) <- NULL
res
}
assign_na_values(df, df2)
# REGION INDUSTRY VALUE
#1 REG01 INDU01 4
#2 REG02 INDU01 10
#3 REG03 INDU01 16
#4 REGSUM INDU01 30
#5 REG01 INDU02 30
#6 REG02 INDU02 6
#7 REG03 INDU02 4
#8 REGSUM INDU02 40
新测试数据
df <- data.frame(
REGION = c("REG01","REG02","REG03","REGSUM","REG01","REG02","REG03","REGSUM"),
INDUSTRY = c("INDU01","INDU01","INDU01","INDU01","INDU02","INDU02","INDU02","INDU02"),
VALUE = c(NA,10,NA,30,30,NA,NA,40)
)
df2 <- data.frame(
REGION = c("REG01","REG02","REG03","REGSUM","REG01","REG02","REG03","REGSUM"),
INDUSTRY = c("INDU01","INDU01","INDU01","INDU01","INDU02","INDU02","INDU02","INDU02"),
VALUE = c(5,15,20,40,10,30,20,60)
)
关于r - 如果 value 等于 NA,则根据 R 中的份额进行估计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65765253/
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我有一个名为 df 的 Pandas DataFrame,它包含 n 列。 列 之一名为COUNT,它显示A 中的值出现了多少次。 A 包含唯一标识符,因此每一行在 column COUNT 中的值为
我有一个非常简单的 java 程序,可以打印出 100 万个随机数。在 linux 中,我观察了这个程序在其生命周期中占用的 %CPU,它从 98% 开始,然后逐渐减少到 2%,从而导致程序非常慢。哪
我正在使用 (EC)DHE 加密类型 x25519,我在计算共享 key 时遇到了一个大问题。 我有三个键: 爱丽丝的私钥: a : "984a382e1e48d2a522a0e81b92fd1351
我是一名优秀的程序员,十分优秀!