Для l oop или laply l oop для простого вопроса автоматизации - PullRequest
0 голосов
/ 29 марта 2020
table(one[YEAR == 2002, "PR1", with=FALSE])[c("8151", "8152", "8153",
                  "0070", "0071", "0072", "0073","0081", "0082", "0083",
                  "0084", "8154", "8155", "8005", "8006")]

Я использую пакет data.table для простых таблиц. Может кто-нибудь указать, как я мог бы сделать эту же таблицу для 2003, 2004, 2005 до 2015? Это было бы путем изменения YEAR == 2002, но я не уверен, как это сделать в функции цикла / применения без копирования и вставки.

1 Ответ

2 голосов
/ 29 марта 2020

Я предлагаю следующее:

library(data.table)
# I create a data.table that resembles yours
n_lines <- length(rep(2002:2015,4))
one <- data.table::data.table("YEAR" = rep(2002:2015,4),
                             "PR1" = c(rep("8151",n_lines/4), rep("8153",n_lines/4),
                                       rep("8154",n_lines/4), rep("8158",n_lines/4)))
# Then I use .N by values of PR1 and YEAR and select only the few values of PR1 that interest me as in your code (but I only selected 8151 and 8153 in this example):

one[,.N,by = .(PR1,YEAR)][PR1 %in% c("8151", "8153")]

Первые строки результата:

   PR1 YEAR N
1: 8151 2002 1
2: 8151 2003 1
3: 8151 2004 1
4: 8151 2005 1
5: 8151 2006 1
6: 8151 2007 1

Вы получаете счетчик для каждого значения PR1 для каждого указанного c года в переменная N.

Надеюсь, это поможет

...