gpt4 book ai didi

按行名删除一堆行 - 如何在 R 中初始化空字符串?

转载 作者:行者123 更新时间:2023-12-05 01:07:45 25 4
gpt4 key购买 nike

我有一个我命名为 N 的稀疏矩阵:

4 x 4 sparse Matrix of class "dgCMatrix"
C1 C2 C3 C4
V1 . 3 5 2
V2 . 5 1 .
V3 . . . .
V4 . . 4 .

我正在尝试删除具有两个或多个缺失值的行。我希望以这样的方式结束:
   C1 C2 C3 C4
V1 . 3 5 2

我写了这段代码:
    #iterate on rows and count: 
#how many values in row ri are bigger than 0
# if count is not bigger than limit, remove row ri
limit = 3
for(ri in 1:nrow(N)){
count <- length(which(N[ri,]>0))
if (count <limit){
tmp <- paste("V",ri,sep="")
rmv <- paste (rmv, tmp, sep= " ")
}
}

#now remove specific row names
N <- N[!rownames(N) %in% rmv, ]

问题是 - 这不起作用,因为在第一个循环中 rmv 未指定并且我收到一个错误:
"object 'rmv' not found"

如何初始化 rmv?
如果我使用:
rmv <- ""

然后我得到一个以空格开头的字符串,例如:
> rmv
[1] " V2"

然后我的最后一行不起作用:
N <- N[!rownames(N) %in% rmv, ]

另外 - 这是我用 R 编写的第一个代码,所以如果我在基本概念中遗漏了任何重要的东西,我很想阅读它(这花了我 6 个小时,并在 stackoverflow 中阅读了大量内容)和不同的 R 教程,但我为自己走到这一步感到非常自豪,这是我的第一个问题)。

谢谢!

最佳答案

假设您的稀疏矩阵称为 N ,这应该这样做:

N[rowSums(as.matrix(N) == 0) < 2, ]

来自 ?xtabs 的一些数据的小例子:
d.ergo <- data.frame(Type = paste0("T", rep(1:4, 9*4)),
Subj = gl(9, 4, 36*4))
set.seed(15) # a subset of cases:
N <- xtabs(~ Type + Subj,
data = d.ergo[sample(36, 10), ],
sparse = TRUE)
N
# 4 x 9 sparse Matrix of class "dgCMatrix"
# 1 2 3 4 5 6 7 8 9
# T1 . 1 . 1 . 1 . 1 .
# T2 1 . . . . . 1 . 1
# T3 . . . . 1 . . . .
# T4 1 . . . . . 1 . .
rowSums(as.matrix(N) == 0) ## How many missing
# T1 T2 T3 T4
# 5 6 8 7
## Let's remove any with more than 7 missing
N[rowSums(as.matrix(N) == 0) < 7, ]
# 2 x 9 sparse Matrix of class "dgCMatrix"
# 1 2 3 4 5 6 7 8 9
# T1 . 1 . 1 . 1 . 1 .
# T2 1 . . . . . 1 . 1

关于按行名删除一堆行 - 如何在 R 中初始化空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18185821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com