Несколько лет спустя просто добавить еще одно простое базовое R-решение, которое по какой-то причине отсутствует здесь xtabs
xtabs(Frequency ~ Category, df)
# Category
# First Second Third
# 30 5 34
Или, если хотите data.frame
назад
as.data.frame(xtabs(Frequency ~ Category, df))
# Category Freq
# 1 First 30
# 2 Second 5
# 3 Third 34
Я предполагаю, что Вы думаете перевыделение . Но лучше для обертывания список в структуре для отслеживания ее текущую длину
пример API
struct s_dynamic_array {
int allocated; /* keep track of allocated size */
int usedLength; /* keep track of usage */
int *array; /* dynamicaly grown with realloc */
};
typedef struct s_dynamic_array s_dynamic_array;
s_dynamic_array *new_dynamic_array(int initalSize);
void free_dynamic_array(s_dynamic_array *array);
int size_of_dynamic_array(s_dynamic_array *array);
s_dynamic_array *add_int_to_dynamic_array(s_dynamic_array *array, int value);
int int_at_index(s_dynamic_array *array, int index);
В бойком существует динамический массив. (не glibc, хотя) Выезд GArray и GPtrArray. Динамический массив не является действительно тем же самым как связанным списком все же.
Так или иначе это является самым полезным ресурсом, который я смог найти при изучении бойкий.
Я всегда использую перевыделение для этого, Вы могли перенести свои собственные функции массива вокруг этого. AFAIK, нет никаких других встроенных вещей для этого.