在 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 错误
我在 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 错误