gpt4 book ai didi

r - 计算 rowMean 忽略 0 值

转载 作者:行者123 更新时间:2023-12-05 09:08:36 26 4
gpt4 key购买 nike

我想计算列 xy 的平均值,如下所示,并添加一列 Mean,

> z
w x y
1 5 1 1
2 6 2 2
3 7 3 3
4 8 4 0

我正在使用如下代码:

z$mean <- rowMeans(subset(z, select = c(x, y)), na.rm = TRUE)

但我不知道如何忽略最后一个 y 值中的 0; xy 值的该行的平均值仅为 4。

期望的输出:

> z
w x y mean
1 5 1 1 1
2 6 2 2 2
3 7 3 3 3
4 8 4 0 4

最佳答案

我们可以将0替换NA,然后用na.rm可以忽略它

subz <- z[, c('x', 'y')]
z$Mean <- rowMeans(replace(subz, subz == 0, NA), na.rm = TRUE)
z
# w x y Mean
#1 5 1 1 1
#2 6 2 2 2
#3 7 3 3 3
#4 8 4 0 4

或者使用dplyr

library(dplyr)
z %>%
# // replace the 0s to NA for the columns x, y
mutate(across(x:y, na_if, 0)) %>% # // => 0 -> NA
# // get the row means of columns x,y
transmute(z = select(., x:y) %>%
rowMeans(na.rm = TRUE)) %>%
# // bind with original dataset
bind_cols(z, .)

数据

z <- structure(list(w = 5:8, x = 1:4, y = c(1L, 2L, 3L, 0L)), 
class = "data.frame", row.names = c("1",
"2", "3", "4"))

关于r - 计算 rowMean 忽略 0 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63306620/

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