R中DF中每列的一些摘要统计

时间:2016-12-30 17:21:04

标签: r

我们假设数据框包含四列

set.seed(123)
x1 <- runif(10,0,1)
x2 <- runif(10,0,1)
x3 <- runif(10,0,1)
x4 <- runif(10,0,1)
DF <- data.frame(x1,x2,x3,x4)

对于每列,我想计算小于或等于0.5的观测数。这是我的代码,但它似乎没有起作用:

a <- vector()
pvect1 <- vector()

for (j in 1:ncol(DF))
{
  for (i in 1:nrow(DF))
  {

    if (DF[i,j] <= 0.5)
      a[i]=1
    else
      a[i]=0 

    pvect1[j] <- cumsum(a[i])    

  }
}

最后,我想创建一个包含两列(C1和C2)的新数据帧(让它称之为DF2),其中C1是DF中的列名(x1,x2,x3和x4),和C2是DF中每列的小于或等于0.5的观测数。

1 个答案:

答案 0 :(得分:2)

我们可以在逻辑colSumsmatrix查找每列中的TRUE元素数

v1 <- colSums(DF <= 0.5)

创建data.frame

DF2 <- data.frame(C1 = names(v1), C2 = v1, stringsAsFactors=FALSE)

如果我们真的需要使用for循环

a <- vector() #it is better to pre-allocate the size
pvect1 <- vector() #same comment as above

for (j in 1:ncol(DF)) {
  for (i in 1:nrow(DF)) {

    if (DF[i,j] <= 0.5) {
        a[i]=1
        } else {
            a[i]=0
        }

     }
   pvect1[j] <-  sum(a)   
 }    

使用矢量化解决方案进行检查

identical(as.vector(v1), pvect1)
#[1] TRUE