Использование read.csv для rowSums с пробелами в R
Я работаю в R с данными, импортированными из CSV-файла, и я пытаюсь взять rowSum подмножества моих данных. Данные могут быть 0, 1 или пустыми. Я хотел бы взять сумму всех 1 во всех этих строках (и в идеале найти количество непустых столбцов в каждой строке, но это моя следующая проблема). Я пытаюсь следующий код:
df1 <- read.csv("/Users/ardyn/test.csv", header = T, na.strings = "")
rowSums(df1[,36:135])
Что дает мне следующую ошибку:
Msgstr "Ошибка в rowSums(df1[, 36:135]): 'x' должно быть числовым".
Когда я проверяю, столбцы, которые я пытаюсь суммировать, представляют собой факторы с 3 уровнями (".","0","1").
Как мне импортировать данные или изменить мою команду rowSums, чтобы, когда я беру сумму по подмножеству переменных, она просто считала 1 с?
2 ответа
Только цифры и NA
может быть обработан rowSums()
, Если это работает, попробуйте установить na.strings="."
,
Иначе мы можем заменить все .
с NA
после прочтения csv.
df1 <- read.csv("/Users/ardyn/test.csv", header = TRUE,
na.strings = ".", stringsAsFactors=FALSE)
rowSums(df1[,36:135], na.rm=TRUE)
Пример изменения .
в NA
пост факт:
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))
Я думаю, что это должно прекратить бросать 'х', должна быть числовая ошибка