Подтвердить что ты не робот

Количество строк, соответствующих критериям

Я ищу команду в 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.

и некоторые вариации приведенных выше выборок. Любая помощь будет оценена! Спасибо.

4b9b3361

Ответ 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",])