我的 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)'
如有任何建议,我们将不胜感激。谢谢。
您离答案并不遥远,但您当前的方法存在一些问题:
myData$newRow <-
将创建一个新的列,而不是新行。我建议像 myData[nrow(myData)+1, ] <-
那样向数据添加新行。[ ]
从数据框中选择行或列时,不同的范围应包含在 c()
中,否则 R 认为它们是不同的维度。colSums()
,rowSums
将获得行的总计,这不是这里所需要的。c(-1, -2)
应该出现在两个计算中(并且位于 <-
的左侧)。所以:
myData[nrow(myData) + 1, c(-1, -2)] <- 100 * colSums(myData[c(1, 47:56, 156:158), c(-1, -2)]) / colSums(myData[, c(-1, -2)])