如何检查某列由某些行组成的百分比

问题描述 投票:0回答:1

我的 CSV 文件太大,无法在 Excel 中打开。在此文件中,我试图查看每列总和中有多少来自第 1、47:56 和 156:158 行。这不包括文件的前两列。行和列也有标题。该文件由大约 22,000 列和 210 行组成。

我试图查看哪些列从上述行中获得的总和超过 >.1%,然后删除这些列。

由于文件太大,我在加载文件时一直使用 vroom 而不是 readr。

文件设置示例:

  H e a d e r           A1    A2    A3    A4    A5    A6
H    1    sample a     1     0     0     13    0     9
e    2    sample b     4     0     0     8     312   24
a    3    sample c     0     20    0     49    0     17
d    4    sample d     2     0     213   18    56    3
e    5    sample e     5     4     0     10    94    62
r    6    sample f     9     87    0     2     33    90

代码:

library(dplyr)

library(vroom)


myData <- vroom("File.csv")

myData$newRow <- 100*(colSums(myData[-1, -2])/rowSums(myData[1, 47:56, 156:158]))

我试图创建一个新行,其百分比为(每列的总和,除了 1 和 2)/(称为行的总和)。这是我收到的最新错误消息,也是我无法理解的错误消息:

> myData$newRow <- 100*(colSums(myData[-1, -2])/rowSums(myData[1, 47:56, 156:158]))
Error:
! Assigned data `100 * ...` must be compatible with existing data.
✖ Existing data has 200 rows.
✖ Assigned data has 21941 rows.
ℹ Only vectors of size 1 are recycled.
Run `rlang::last_trace()` to see where the error occurred.
Warning message:
In drop && length(xo) == 1L :
  'length(x) = 3 > 1' in coercion to 'logical(1)'

如有任何建议,我们将不胜感激。谢谢。

r row percentage col vroom
1个回答
0
投票

您离答案并不遥远,但您当前的方法存在一些问题:

  1. myData$newRow <-
    将创建一个新的,而不是新行。我建议像
    myData[nrow(myData)+1, ] <-
    那样向数据添加新行。
  2. 当使用
    [ ]
    从数据框中选择行或列时,不同的范围应包含在
    c()
    中,否则 R 认为它们是不同的维度。
  3. 您应该在两个计算中使用
    colSums()
    rowSums
    将获得行的总计,这不是这里所需要的。
  4. 列子集
    c(-1, -2)
    应该出现在两个计算中(并且位于
    <-
    的左侧)。
  5. 除法计算顺序错误。

所以:

myData[nrow(myData) + 1, c(-1, -2)] <- 100 * colSums(myData[c(1, 47:56, 156:158), c(-1, -2)]) / colSums(myData[, c(-1, -2)])
© www.soinside.com 2019 - 2024. All rights reserved.