在R中使用apply()来计算每列范围内的单元格数

时间:2020-10-14 15:12:21

标签: r apply

我有一个大数据框,其中包含0到1之间的数字,为此,我试图为每列计算0.4到0.6之间的值的数目。我已经成功地计算出均值,中位数等,使用apply输出包含列均值的向量:

column_mean <- apply(x, 2, mean, na.rm=TRUE)

但是我还不太清楚如何修改apply()以计算落在范围内的值的数量。我在想类似的事情,但是在所有列中都如此:

column_counts <- apply(x, 2, sum(x$c1 > 0.4 & x$c1 < 0.6), na.rm=TRUE)

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

此答案是否正确

> df <- data.frame(Col1 = rnorm(10),
+                  Col2 = rnorm(10),
+                  Col3 = rnorm(10))
> df
          Col1       Col2       Col3
1   0.73804784  1.7342752 -1.0906748
2   1.65272822 -1.2936601  0.4721306
3   0.41988220  0.1148715 -0.3010973
4   0.19199975  1.2164140  0.7646785
5   0.09016752 -1.7179874 -0.5046282
6  -1.59440039  1.2948078 -0.3152287
7  -0.74238335 -0.6169977  0.8392895
8   0.28572911  0.8212279  0.5394922
9  -1.71357200  2.0856380  0.3221748
10 -0.29211236  0.5290523  0.4206429
> sapply(df, function(x) sum(x > 0.4 & x < 0.6))
Col1 Col2 Col3 
   1    1    3 
>

答案 1 :(得分:0)

进行自定义功能:

count_interval <- function(x) { 
  return(length(x[!is.na(x) & x>0.4 & x<0.6])) 
}

,然后像以前一样使用它:

column_counts <- apply(x, 2, count_interval)

答案 2 :(得分:0)

首先只是一个提示,您应该提供一个示例供我们使用,请选中https://stackoverflow.com/help/minimal-reproducible-example

您可以创建一个进行特定测试的函数,然后将其传递以应用:

test = function(a){sum(a>=0.4 & a<=0.6)}
column_counts = apply(x, 2, test)