在 R 中使用 read.csv 进行带空格的 rowSums

Using read.csv for rowSums with blanks in R

我在 R 中处理从 csv 文件导入的数据,我正在尝试获取数据子集的 rowSum。数据可以是 0、1 或空白。我想对所有这些行中的所有 1 求和(理想情况下计算每行中有多少非空白列,但这是我的下一个问题)。我正在尝试以下代码:

df1 <- read.csv("/Users/ardyn/test.csv", header = T, na.strings = "")

rowSums(df1[,36:135])

这给了我以下错误:

"Error in rowSums(df1[, 36:135]) : 'x' must be numeric".

当我检查时,我尝试求和的列是具有 3 个级别(“.”、“0”、“1”)的因子。

如何导入数据或更改我的 rowSums 命令,以便当我对一个变量子集求和时它只计算 1?

rowSums() 只能处理数字和 NA。如果有效,请尝试设置 na.strings=".".
否则我们可以在阅读 csv 后将所有 . 替换为 NA

df1 <- read.csv("/Users/ardyn/test.csv", header = TRUE, 
  na.strings = ".", stringsAsFactors=FALSE)

rowSums(df1[,36:135], na.rm=TRUE)

. 更改为 NA post 的示例事实:

dtf <- as.data.frame(matrix(sample(c(".", "0", "1"), 20, replace=TRUE), 4))

sapply(dtf, function(x) as.numeric(gsub("\.", "NA", x)))

#      V1 V2 V3 V4 V5
# [1,]  1  0  0  0  1
# [2,]  1  1  0  0  0
# [3,]  1  1 NA  1 NA
# [4,] NA NA  1  0  0

我不确定之前的答案是否解决了您只想对 1 求和的问题。所以也许这就是你能做的

df1 <- read.csv("/Users/ardyn/test.csv", header = TRUE, na.strings = ".",stringsAsFactors=FALSE)

myfun <- function(x) {
if (x==1) {
    return (as.numeric(x))
          }
else {
    return (0L)
      }
}
rowSums(apply(df1,c(1,2),myfun))

我认为它应该停止抛出 'x' must be numeric 错误