У меня есть кадр данных в R, который похож на следующее.На самом деле мой настоящий фрейм данных 'df' здесь намного больше, чем этот, но я действительно не хочу никого путать, поэтому я стараюсь максимально упростить вещи.
Итак, вот фрейм данных.
id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,3)
df <-data.frame(id,a,b,c,d,e)
df
По сути, я хотел бы получить числа для каждого столбца (a, b, c, d, e) и для каждой группы идентификаторов (1,2,3) (дляэта последняя группа см. мой столбец "id").
Таким образом, для столбца 'a' и для номера идентификатора '1' (для последнего см. Столбец 'id') код будет выглядеть примерно так:
as.numeric(table(df[1:10,2]))
##The results are:
[1] 3 7
Просто краткообъясните мои результаты: в столбце «а» (и в отношении только тех записей, которые имеют номер «1» в столбце «id») можно сказать, что число «1» встречалось 3 раза, а число «3» - 7 раз.
Опять же, просто чтобы показать вам другой пример.Для столбца «a» и для номера идентификатора «2» (для последней группировки снова см. Столбец «id»):
as.numeric(table(df[11:20,2]))
##After running the codes the results are:
[1] 4 3 3
Позвольте мне еще немного пояснить: в столбце «a» и касаемо только тех,наблюдения, которые имеют номер «2» в столбце «id»), мы можем сказать, что число «1» произошло 4 раза, число «2» произошло 3 раза и число «3» произошло 3 раза.
Так что эточто я хотел бы сделать.Вычисление вхождений чисел для каждого пользовательского подмножества (а затем сбор этих значений во фрейм данных).Я знаю, что это не сложная задача, но ПРОБЛЕМА заключается в том, что мне придется регулярно менять входной фрейм данных 'df', и, следовательно, как общее количество строк, так и столбцов может меняться со временем…
То, что я до сих пор делал, это то, что я разделил фрейм данных 'df' по столбцам, например:
for (z in (2:ncol(df))) assign(paste("df",z,sep="."),df[,z])
Таким образом, df.2 будет ссылаться на df $ a, df.3 будет равно df $b, df.4 будет равно df $ c и т. д. Но я действительно застрял сейчас и не знаю, как двигаться дальше ...
Существует ли правильный, "автоматический" способ решения этой проблемы?