我有一个
.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,但没有。只有数字。
这是我的完整代码:
Counts <- read.delim("RiboTag_count_matrix_10-05-2023.csv", header = TRUE, sep=",")
Counts ## shows the matrix visually
Counts <- Counts[which(rowSums(Counts > 0,] ## filter out 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
}
解决我的问题,但仍然给我相同的错误消息。
等等,你尝试喝不加奶的咖啡,但先买加奶的,稍后再拿出来。
在文档中
?read.delim
,我们在“CSV 文件”部分进一步阅读,
最常见的带有行名称的 CSV 文件形式需要使用
使用文件第一列中的名称作为行名称,read.csv(..., row.names = 1)
也适用于
read.delim
。在上面的部分中,我们了解到,我们得到的 Value 是一个 data.frame
,并且需要执行 as.matrix()
才能获得矩阵。
因此,要获得具有所需整数以及行和列名称的
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
来自哪里。
matrix
es 与 data.frame
不同,只能包含一个 typeof
数据,例如数字(整数、双精度)或字符。如果我们有一个数字矩阵 m
,
(m <- matrix(0, 2, 2))
# [,1] [,2]
# [1,] 0 0
# [2,] 0 0
typeof(m)
# [1] "double"
并且仅将一个元素更改为字符,
m[1, 2] <- 'A'
m
# [,1] [,2]
# [1,] "0" "A"
# [2,] "0" "0"
我们得到一个字符矩阵,
typeof(m)
# [1] "character"
您的
Count
矩阵就是这种情况。
数据:
foo.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