Реорганизация данных в таблице - PullRequest
0 голосов
/ 03 марта 2020

Я очень плохо знаком с R и испытываю трудности с чем-то, что кажется довольно простым. К сожалению, я не могу поделиться фотографиями моей реальной работы, так как я работаю с данными о животных, и они чувствительны, поэтому я включил поддельную версию того, что у меня есть и что я надеюсь создать.

У меня есть таблица данных, которая показывает, сколько раз каждое животное наблюдалось (точки данных с местоположением в ячейках) в год (таблица на L на рисунке ниже). Таким образом, часто бывает несколько строк одного и того же года, потому что каждый уникальный идентификатор воротника имеет свою собственную строку. Я хочу упростить это, чтобы у меня был год, число отсчетов (для всех животных в этом году) и новый столбец, показывающий, сколько уникальных ID # (таблица на R на рисунке).

Любая помощь будет принята с благодарностью.

Figure attachment

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Вот решение с использованием dplyr.

library(dplyr)
df %>%
  #group by year columns
  group_by(year) %>%
  #summarize: sum the counts and count the number of rows (num uniqueID)
  summarize(count = sum(count),
            numBears = n())
0 голосов
/ 03 марта 2020

Альтернативы:

dat <- data.frame(
  YEAR = c(1995L, 1995L, 1998L),
  ID   = c(100L, 101L, 100L),
  COUNT = c(4L, 17L, 25L)
)
tmp <- tapply(dat, dat$YEAR, function(x) data.frame(COUNT = sum(x$COUNT), NO = nrow(x)))
tmp <- do.call(rbind.data.frame, Map(cbind, YEAR=names(tmp), tmp))
tmp
#      YEAR COUNT NO
# 1995 1995    21  2
# 1998 1998    25  1

(«Дубликаты» 1995 и 1998 годов слева - это имена строк, их можно безопасно игнорировать или их можно удалить с помощью rownames(tmp) <- NULL.)


Другое:

library(data.table)
datDT <- as.data.table(dat)
datDT[, .(COUNT = sum(COUNT), NO = .N), by = .(YEAR)]
#    YEAR COUNT NO
# 1: 1995    21  2
# 2: 1998    25  1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...