Я знаю, что это может быть выполнено с помощью цикла for, но я уверен, что в конструкции data.table
есть более элегантное решение.Создайте новую переменную со ссылкой из другой data.table
У меня есть две таблицы данных, и будет использовать «ирис», чтобы проиллюстрировать мою проблему:
library("data.table")
A <- as.data.table(iris) #primary data table
B <- A[Sepal.Width > 3, .N, by = Species] #count from A meeting condition
head(A, 3)
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1: 5.1 3.5 1.4 0.2 setosa
#2: 4.9 3.0 1.4 0.2 setosa
#3: 4.7 3.2 1.3 0.2 setosa
B
# Species N
#1: setosa 42
#2: versicolor 8
#3: virginica 17
Я хотел бы, чтобы добавить новую переменную B, которая является просто часть набора данных, что B представляет , то есть для первой строки на выходе будет что-то вроде:
B[, Proportion := N/nrow(A[Species == "setosa"])]
правая часть этого индекса будет, очевидно, должны быть динамичными, ссылаясь на значение первого столбца в B построчно ..
Это итерация, которая ускользает от меня (хотя я чувствую, что это связано с ключом таблицы данных)?); очень ценю любую помощь!
Jaap это отлично работало на моих (гораздо больших) таблицах данных. Я отметил это как есть, но не могли бы вы немного объяснить это словами? Я полагаю, что ваше назначение B отличается тем, что вы присвоили ему другое имя столбца/переменной («spec» v. «Species»), которое будет использоваться в индексе для Пропорции, да? .. почему «нужно»? хоть?Я тестировал без него и видел, что результаты были неправильными, но я не могу понять, как это исправить. – daRknight
@daRknight обновлено с кратким объяснением, HTH – Jaap