Количество строк, соответствующих критериям
Я ищу команду в R, которая эквивалентна этой инструкции SQL. Я хочу, чтобы это было очень простое базовое решение без использования сложных функций или типов пакетов dplyr.
Select count(*) as number_of_states
from myTable
where sCode = "CA"
так что по существу я бы подсчитывал количество строк, соответствующих моему условию.
Я импортировал файл csv в mydata в качестве фрейма данных. Да, я пробовал их безрезультатно.
-
nrow(mydata$sCode == "CA") ## ==>> returns NULL
-
sum(mydata[mydata$sCode == 'CA',], na.rm=T) ## ==>> gives Error in FUN(X[[1L]], ...) : only defined on a data frame with all numeric variables
-
sum(subset(mydata, sCode='CA', select=c(sCode)), na.rm=T) ## ==>> FUN(X[[1L]], ...) : only defined on a data frame with all numeric variables
-
sum(mydata$sCode == "CA", na.rm=T) ## ==>> returns count of all rows in the entire data set, which is not the correct result.
и некоторые вариации приведенных выше выборок. Любая помощь будет оценена! Спасибо.
Ответы
Ответ 1
mydata$sCode == "CA"
возвращает логический массив со значением TRUE
везде, где выполняется условие. Чтобы проиллюстрировать:
> mydata = data.frame(sCode = c("CA", "CA", "AC"))
> mydata$sCode == "CA"
[1] TRUE TRUE FALSE
Есть несколько способов справиться с этим:
-
sum(mydata$sCode == "CA")
, как это предлагается в комментариях; потому как
TRUE
интерпретируется как 1 и FALSE
как 0, это должно возвращать
число значений TRUE
в вашем векторе.
-
length(which(mydata$sCode == "CA"))
; функция which()
возвращает вектор индексов, где выполняется условие,
длина которого равна числу "CA"
.
Изменить, чтобы развернуть то, что происходит в # 2:
> which(mydata$sCode == "CA")
[1] 1 2
which()
возвращает вектор, идентифицирующий каждый столбец, где выполняется условие (в этом случае столбцы 1 и 2 кадра данных). length()
этого вектора - количество вхождений.
Ответ 2
sum
используется для добавления элементов; nrow
используется для подсчета количества строк в прямоугольном массиве (обычно это матрица или data.frame); length
используется для подсчета количества элементов в векторе. Вам необходимо правильно применить эти функции.
Все ваши решения показывают фундаментальное недоразумение, если использование структур суммы и R.
Предположим, что ваши данные представляют собой кадр данных с именем "dat". Правильные решения:
nrow(dat[dat$sCode == "CA",])
length(dat$sCode[dat$sCode == "CA"])
sum(which(dat$sCode == "CA"))
Ответ 3
-
mydata$sCode
- это вектор, поэтому вывод nULL равен NULL.
-
mydata[mydata$sCode == 'CA',]
возвращает data.frame
где sCode == 'CA'
. sCode содержит символ. Поэтому sum
дает вам ошибку.
-
subset(mydata, sCode='CA', select=c(sCode))
, вы должны использовать sCode=='CA'
вместо sCode='CA'
. Тогда подмножество возвращает вам вектор, где sCode равно CA, поэтому вы должны использовать
length (subset (na.omit(mydata), sCode = 'CA', select = c (sCode)))
Или вы можете попробовать следующее: sum(na.omit(mydata$sCode) == "CA")
Ответ 4
Просто попробуйте использовать подмножество
nrow(subset(data,condition))
Пример Example
nrow(subset(myData,sCode == "CA"))
Ответ 5
С пакетом dplyr
используйте
nrow(filter(mydata, sCode == "CA")),
Все предоставленные здесь решения дали мне такую же ошибку, как и multi-sam, но это сработало.
Ответ 6
Команда grep может использоваться
CA = mydata [grep ( "CA", mydata $sCode,]
nrow (СА)
Ответ 7
чтобы получить количество наблюдений, число строк в вашем наборе данных будет более корректным:
nrow(dat[dat$sCode == "CA",])