有条件地应用值超过特定值的函数
Conditionally apply a function with values over a certain value
我确定有一个简单的解决方案,但我似乎无法输出正确的值。我有一个数据框,我想根据高于某个值的值计算平均值,在本例中为 150。
df1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1))
df2 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1))
df3 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1))
Example <- cbind(df1,df2,df3)
我做过的类似事情让我认为应用可能是最有效的方法(并且我尝试按照下面 link 中的步骤操作)。
http://rforpublichealth.blogspot.co.uk/2012/09/the-infamous-apply-function.html。但是,以下代码的输出是错误的,尽管我试图表示平均值高于 150,但输出低于 1。
test<- apply(Example,2,function(x) {mean(x > 150)})
非常感谢任何帮助,谢谢!
你很接近,但需要做 mean(x[x > 150])
而不是 mean(x > 150)
:
test<- apply(Example,2,function(x) {mean(x[x > 150])})
这是有效的,因为 x[x > 150]
说 "take all values of x where x is above 150"。
所有值的平均值。
mean(as.matrix(Example)[as.matrix(Example) > 150])
[1] 426.0402
按列
sapply(Example, function(x) mean(x[x > 150]))
V1 V1 V1
575.6926 332.9713 175.6809
一个更快的选择是在按列计算平均值之前使用 matrix subsetting
到 select 正确的值:
ids <- which(Example>150,arr.ind=T) ## first all right values are selected
sapply(seq_len(ncol(Example)), ## compute mean for each column
function(x)mean(Example[ids[ids[,2]==x,]]))
我确定有一个简单的解决方案,但我似乎无法输出正确的值。我有一个数据框,我想根据高于某个值的值计算平均值,在本例中为 150。
df1 <- as.data.frame(matrix(sample(0:1000, 36*10, replace=TRUE), ncol=1))
df2 <- as.data.frame(matrix(sample(0:500, 36*10, replace=TRUE), ncol=1))
df3 <- as.data.frame(matrix(sample(0:200, 36*10, replace=TRUE), ncol=1))
Example <- cbind(df1,df2,df3)
我做过的类似事情让我认为应用可能是最有效的方法(并且我尝试按照下面 link 中的步骤操作)。 http://rforpublichealth.blogspot.co.uk/2012/09/the-infamous-apply-function.html。但是,以下代码的输出是错误的,尽管我试图表示平均值高于 150,但输出低于 1。
test<- apply(Example,2,function(x) {mean(x > 150)})
非常感谢任何帮助,谢谢!
你很接近,但需要做 mean(x[x > 150])
而不是 mean(x > 150)
:
test<- apply(Example,2,function(x) {mean(x[x > 150])})
这是有效的,因为 x[x > 150]
说 "take all values of x where x is above 150"。
所有值的平均值。
mean(as.matrix(Example)[as.matrix(Example) > 150])
[1] 426.0402
按列
sapply(Example, function(x) mean(x[x > 150]))
V1 V1 V1
575.6926 332.9713 175.6809
一个更快的选择是在按列计算平均值之前使用 matrix subsetting
到 select 正确的值:
ids <- which(Example>150,arr.ind=T) ## first all right values are selected
sapply(seq_len(ncol(Example)), ## compute mean for each column
function(x)mean(Example[ids[ids[,2]==x,]]))