Как посчитать количество наблюдений в каждом столбце в сгруппированном кадре данных в r - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть кадр данных, состоящий из результатов геохимических проб, который включает следующие переменные:

Year, Zone, *48 analyzed elements*, *more information*.

Я хочу знать, сколько проб было собрано каждый год в каждой зоне для каждого элемента.В общем, я хотел бы, чтобы таблица выглядела так:

Year,Zone,Ag_ppm, ..., Zr_ppm
1981, ZoneA, 0, ..., 0 
1981, ZoneB, 20, ..., 0
1983, ZoneA, 0, ..., 150 

Я пробовал следующее:

 Elt_count <- SoilGeology %>%
  group_by(Year, Zone) %>%
  summarise_at(vars(Ag_ppm:Zr_ppm),funs(sum)) %>%
  select(Year, Zone, Ag_ppm:Zr_ppm)

Это работает, но не дает мне информацию, которую я хочу(Я не хочу кумулятивную сумму отсчетов, а количество отсчетов).Затем я попытался:

Elt_count <- SoilGeology %>%
  group_by(Year, Zone) %>%
  summarise_at(vars(Ag_ppm:Zr_ppm),funs(n)) %>%
  select(Year, Zone, Ag_ppm:Zr_ppm)

Но я получаю следующую ошибку: Error in summarise_impl(.data, dots) : n () does not take arguments

Я также пытался:

d <- SoilGeology %>%
  group_by(Year, Zone) %>%
  summarise_all(n) %>%
  select(Year, Zone, Ag_ppm:Zr_ppm)

Но я получаю ту же ошибку, что и выше: Error in summarise_impl(.data, dots) : n () does not take arguments

А также пробовал со счетом:

Elt_count <- SoilGeology %>%
  group_by(Year, Zone) %>%
  count(Au_ppm:Zr_ppm, na.rm = TRUE) %>%
  select(Year, Zone, Ag_ppm:Zr_ppm)

Но я получаю ошибку:

Error in mutate_impl(.data, dots) : Evaluation error: NA/NaN argument.
In addition: Warning messages:
1: In Au_ppm:Zr_ppm :
  numerical expression has 52 elements: only the first used
2: In Au_ppm:Zr_ppm :
  numerical expression has 52 elements: only the first used

У кого-нибудь есть объяснение этим ошибкам?Или лучшее решение для моей проблемы?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

sum добавляет числа, n() и count() количество строк.Если числа больше 0 имеют для вас особое значение, вам нужно сообщить об этом R.Классический способ подсчета количества вещей, удовлетворяющих условию, это sum(..test for condition..), поэтому, если вы хотите, чтобы количество элементов в x превышало 0, sum(x > 0) сделает это.Это функция, которую вы хотите применить ко всем столбцам:

# reproducible example on built-in data
mtcars %>%
  group_by(cyl) %>%
  summarize_at(vars(disp:carb), function(x) sum(x > 5))

# for your data
Elt_count <- SoilGeology %>%
  group_by(Year, Zone) %>%
  summarise_at(vars(Ag_ppm:Zr_ppm), function(x) sum(x > 0))

Я не знаю ваших данных.Вы можете изменить его на sum(x != 0), если есть и отрицательные числа, которые вы хотите посчитать.Если пропущенные значения отсутствуют, sum(x > 0, na.rm = TRUE) (если вы посмотрите на ?sum, он принимает аргумент na.rm).

0 голосов
/ 26 февраля 2019

Возможно, вам нужен следующий код.

library(dplyr) count(SoilGeology, year, zone, Ag_ppm:Zr_ppm)

Или эквивалентно функции трубы

SoilGeology %>% count(SoilGeology, year, zone, Ag_ppm:Zr_ppm)

Поочередно

SoilGeology %>% group_by(year, zone, Ag_ppm:Zr_ppm) %>% summarise(number = n())

Или

SoilGeology %>% group_by(year, zone, Ag_ppm:Zr_ppm) %>% tally()

Если ошибки не устранены, необходимо проверить 'class ()' ваших переменных.Значения, возможно, должны быть приведены к числовому.При необходимости попробуйте variable -> as.numeric(variable) и попробуйте снова.

...