У меня есть два списка:как вычислить конкретное подмножество в dataframe в г и сохранить вычисление в другом списке
список 1:
id name age
1 jake 21
2 ashly 19
45 lana 18
51 james 23
5675 eric 25
список 2 (тв часы):
id hours
1 1.1
1 3
1 2.5
45 5.6
45 3
51 2
51 1
51 2
Это просто пример, реальные списки очень большие: список 1 - 5000 id, список 2/3/4 - содержит более 1 миллиона строк (а не уникальный идентификатор).
Мне нужно для каждого списка 2 и до вычисления среднего значения/суммы/подсчета для каждого идентификатора и добавления значения в список 1. Обратите внимание, что мне нужен расчет, сохраненный в другом списке с разными номерами строк.
пример:
list 1:
id name age tv_average
1 jake 21 2.2
2 ashly 19 n/a
45 lana 18 4.3
51 james 23 1.6667
5675 eric 25 n/a
это мои попытки:
for (i in 1:nrow(list2)) {
p <- subset(list2,list2$id==i)
list2$tv_average[i==list2$id] <- sum(p$hours)/(nrow(p))
}
ошибка: из 22999 строк она работает только на 21713 строк.
Вы должны быть более точным в ваших языковых данных и доля воспроизводимо. Оба эти объекта выглядят так: class 'data.frame', особый тип класса' list'. 'subset()' может работать с кадрами данных, но не в списках. Все это будет очищено, если вы совместно воспроизводите данные, используя 'dput()' или код обмена для создания выборочных данных. [Пожалуйста, прочитайте эту ссылку о том, как сделать хорошие воспроизводимые примеры] (http://stackoverflow.com/q/5963269/903061), а затем отредактируйте свой вопрос, чтобы сделать ваши данные воспроизводимыми. – Gregor
Если вы хотите попробовать больше для решения самостоятельно, похоже, что это простой двухэтапный процесс. 1. Создайте свой средний/сумма/счет для каждого идентификатора в списке 2 - см. FAQ [Как суммировать переменную по группе?] (Http://stackoverflow.com/q/1660124/903061). 2. Присоедините этот результат к вашему списку 1 - см. FAQ [Как объединить данные в R?] (Http://stackoverflow.com/q/1299871/903061). Вы хотите присоединиться к левому кругу в этом случае. – Gregor
Вам не нужно обмениваться реальными данными. Вам просто нужно поделиться данными, которые у вас есть выше ** воспроизводимо **, либо с помощью 'dput()', либо совместно использовать код для создания выборочных данных. ** Пожалуйста, прочитайте ссылку в моем первом комментарии **, чтобы узнать об этом. Кроме того, как я уже сказал, * возможно * у вас есть кадры данных, а не только списки. И подмножество отлично работает с кадрами данных. Я просто не могу точно сказать, потому что ваши данные не воспроизводятся совместно. – Gregor