如何使用dataframe,如何计算条件值的行平均值

如何使用dataframe,如何计算条件值的行平均值,r,dataframe,R,Dataframe,例如(即使我的问题适用于更大的表),假设我有一个这种类型的数据帧: > df = data.frame(rep(NA,3),rep(NA,3),c(-6,5,NA),c(-2,-1,4),c(NA,2,-3),c(1,-3,2)) > colnames(df) = c("Positive mean","Negative mean","a","b","c","d") > df Positive mean Negative mean a b c d 1

例如(即使我的问题适用于更大的表),假设我有一个这种类型的数据帧:

> df = data.frame(rep(NA,3),rep(NA,3),c(-6,5,NA),c(-2,-1,4),c(NA,2,-3),c(1,-3,2))
> colnames(df) = c("Positive mean","Negative mean","a","b","c","d")

> df
  Positive mean Negative mean  a  b  c  d
1            NA            NA -6 -2 NA  1
2            NA            NA  5 -1  2 -3
3            NA            NA NA  4 -3  2
我希望能够计算每一行,正值的平均值和负值的平均值。为了获得最终表格:

> df
  Positive mean Negative mean  a  b  c  d
1           1.0            -4 -6 -2 NA  1
2           3.5            -2  5 -1  2 -3
3           3.0            -3 NA  4 -3  2

因此,我想知道是否有一种不使用循环的方法。在
MARGIN=1
(行)上使用
apply
,选择相关值(子集正值或负值),然后取
mean
。使用
na.rm=TRUE
在获取
mean

apply(df[,-(1:2)], MARGIN = 1, function(x) mean(x[x>0], na.rm = TRUE))
#[1] 1.0 3.5 3.0
apply(df[,-(1:2)], 1, function(x) mean(x[x<0], na.rm = TRUE))
#[1] -4 -2 -3
apply(df[,-(1:2)],边距=1,函数(x)平均值(x[x>0],na.rm=TRUE))
#[1] 1.0 3.5 3.0
应用(df[,-(1:2)],1,函数(x)平均值(x[x这是一种“矢量化”方法:

df[[1]] <- rowMeans( df[3:6]*(df[3:6] >0) , na.rm=TRUE)
df[[2]] <- rowMeans( df[3:6]*(df[3:6] < 0) , na.rm=TRUE)

>  df
  Positive_mean Negative_mean  a  b  c  d
1     0.3333333     -2.666667 -6 -2 NA  1
2     1.7500000     -1.000000  5 -1  2 -3
3     2.0000000     -1.000000 NA  4 -3  2
df[[1]]0),na.rm=TRUE)
df[[2]]df
正的意思是负的意思是a b c d
1 0.3333333-2.666667-6-2 NA 1
2     1.7500000     -1.000000  5 -1  2 -3
32000000-1000000000NA 4-32

在风格方面,R的大多数普通用户不会在列名中留下空格,而是使用camelCase、“.”或“u.”中的一个。为什么需要排序?使用na.rm=TRUE更有效(也不那么晦涩)