Вопрос довольно неловко сформулирован, из-за чего неясно, чего на самом деле хотят.
Но из вопроса кажется, что вы хотите сделать столбец последовательности, 1,2,3,...
для каждой группы по столбцу LotID
. Есть несколько способов достичь этого. Сначала я попытаюсь изменить ваш собственный код, который покажет, как можно достичь «а» решения с помощью циклов. Далее я покажу, как этого достичь, используя пакет data.table
.
Использование циклов
Это довольно сложно, в основном просто отслеживать, что к чему. Это можно сделать с помощью одного цикла и нескольких переменных отслеживания. Я предлагаю сравнить его с вашим собственным кодом, так как я исправляю некоторые ошибки и указываю на них.
#Initiate the group
group <- NULL
#Note the 'seq' in the for
for(i in seq(nrow(Crystal.Diam.2))){
if(group != Crystal.Diam.2[i, 1]){
group <- Crystal.Diam.2[i, 1]
j <- 1
}
Crystal.Diam.2[i, 4] <- j
}
j
используется в качестве счетчика. Я использую оператор if
, чтобы проверить, совпадает ли группа, в противном случае я сбрасываю счетчик.
Однако этого также можно достичь множеством других способов. Один - data.table
(другой - тидиверс), как показано ниже
library(data.table)
setDT(Crystal.Diam.2)
#data table syntax. .N is the row count within grouping. Size := --- adds a column or assigns a column with the values on the RHS.
Crystal.Diam.2[, Size := seq(.N), by = LotID)
Это быстрее и удобочитаемее.