gpt4 book ai didi

右 |多列的条件变异

转载 作者:行者123 更新时间:2023-12-04 01:14:41 30 4
gpt4 key购买 nike

如果一行中六个观察值中至少有三个是 != NA,我想计算该行的平均值。如果存在四个或更多 NA,则平均值应显示为 NA。

给出平均值的例子,忽略了 NA:

require(dplyr)

a <- 1:10
b <- a+10
c <- a+20
d <- a+30
e <- a+40
f <- a+50

df <- data.frame(a,b,c,d,e,f)

df[2,c(1,3,4,6)] <- NA
df[5,c(1,4,6)] <- NA
df[8,c(1,2,5,6)] <- NA


df <- df %>% mutate(mean = rowMeans(df[,1:6], na.rm=TRUE))

我想到了使用

case_when

但我不确定如何正确使用它:

df <- df %>% mutate(mean = case_when( ~ rowMeans(df[,1:6], na.rm=TRUE), TRUE ~ NA))

最佳答案

您可以尝试一个 base R 解决方案,将非 NA 值的数量保存在一个新变量中,然后使用 ifelse()意思是:

#Data
a <- 1:10
b <- a+10
c <- a+20
d <- a+30
e <- a+40
f <- a+50

df <- data.frame(a,b,c,d,e,f)

df[2,c(1,3,4,6)] <- NA
df[5,c(1,4,6)] <- NA
df[8,c(1,2,5,6)] <- NA
#Code
#Count number of non NA
df$count <- rowSums( !is.na( df [,1:6]))
#Compute mean
df$Mean <- ifelse(df$count>=3,rowMeans(df [,1:6],na.rm=T),NA)

输出:

    a  b  c  d  e  f count     Mean
1 1 11 21 31 41 51 6 26.00000
2 NA 12 NA NA 42 NA 2 NA
3 3 13 23 33 43 53 6 28.00000
4 4 14 24 34 44 54 6 29.00000
5 NA 15 25 NA 45 NA 3 28.33333
6 6 16 26 36 46 56 6 31.00000
7 7 17 27 37 47 57 6 32.00000
8 NA NA 28 38 NA NA 2 NA
9 9 19 29 39 49 59 6 34.00000
10 10 20 30 40 50 60 6 35.00000

关于右 |多列的条件变异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63755059/

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