使用阈值过滤掉计数矩阵

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

我有一个

.csv
格式的计数矩阵。数据结构如下:

基因 条件。 1 条件。 2 条件。 3
阿尔法 77 51 98
测试版 0 0 71
塞纳 823 856 0

我正在尝试过滤掉新矩阵中总和大于 0 的行的矩阵。

为了过滤掉总和为0的行,我这样编写了代码:

Counts <- Count[which(rowSums(Counts) > 0, ]
但它给了我一个错误:

Error in h(simpleError(msg, call)) : 
  error in evaluating the argument 'x' in selecting a method for function 'which': 'x' must be numeric

我检查了数据,看看是否有 NA,但没有。只有数字。

这是我的完整代码:

library(DESeq2)
library(ggplot2)
Counts <- read.delim("RiboTag_count_matrix_10-05-2023.csv", header = TRUE, sep=",")

Counts # shows the matrix visually

Counts <- Counts[which(rowSums(Counts > 0,] # filterout rows with 0's

我不确定我的代码中哪里产生了错误。任何意见是极大的赞赏。谢谢你。

我什至尝试过

# Convert Counts to a matrix
Counts <- as.matrix(Counts)

# Convert them to numeric
Counts <- apply(Counts, 2, as.numeric)

# Check for and handle missing values
if (any(is.na(Counts))) {
  # Handle missing values (e.g., replace with 0)
  Counts[is.na(Counts)] <- 0
}

解决我的问题,但仍然给我相同的错误消息

r sorting rstudio filtering
1个回答
0
投票

等等,你尝试喝不加奶的咖啡,但先买加奶的,稍后再拿出来。

在文档中

?read.delim
,我们在“CSV 文件”部分进一步阅读,

最常见的带有行名称的 CSV 文件形式需要使用

read.csv(..., row.names = 1)
使用文件第一列中的名称作为行名称,

也适用于

read.delim
。就在上面我们了解到,我们得到的Value是一个
data.frame

因此,要获得具有所需整数以及行和列名称的

matrix
,请执行

(Counts <- read.delim('foo.csv', row.names=1) |> as.matrix())
#         cond.1 cond.2 cond.3
# Alpha       77     51     98
# Beta         0      0     71
# Gamma      823    856      0
# Delta        0      0      0
# Epsilon     59     NA      1

class(Counts)
# [1] "matrix" "array" 
typeof(Counts)
# [1] "integer"

一切都很好。

which
相关的事情是,它“关心”
NA
。 (我在 Epsilon 行添加了一个来演示。)

使用

which
时也会删除带有
NA
的行,

Counts[which(rowSums(Counts) > 0), ] 
#       cond.1 cond.2 cond.3
# Alpha     77     51     98
# Beta       0      0     71
# Gamma    823    856      0

不使用它,就会失败。

Counts[rowSums(Counts) > 0, ] 
#       cond.1 cond.2 cond.3
# Alpha     77     51     98
# Beta       0      0     71
# Gamma    823    856      0
# <NA>      NA     NA     NA

但是,您可能需要决定是否真的要删除这些行,还是对它们执行其他操作,例如首先估算或检查

NA
来自哪里。


数据:

.csv 文件:

"cond.1"    "cond.2"    "cond.3"
"Alpha" 77  51  98
"Beta"  0   0   71
"Gamma" 823 856 0
"Delta" 0   0   0
"Epsilon"   59  NA  1
© www.soinside.com 2019 - 2024. All rights reserved.