Консолидация повторяющихся строк в R и укажите, какие столбцы использовать [duplicate]

Вы можете сделать это ...

var string = 'This is\n' +
'a multiline\n' + 
'string';
117
задан Henrik 8 April 2018 в 20:24
поделиться

5 ответов

Где эта функция year() из?

Вы также можете использовать пакет reshape2 для этой задачи:

require(reshape2)
df_melt <- melt(df1, id = c("date", "year", "month"))
dcast(df_melt, year + month ~ variable, sum)
#  year month         x1           x2
1  2000     1  -80.83405 -224.9540159
2  2000     2 -223.76331 -288.2418017
3  2000     3 -188.83930 -481.5601913
4  2000     4 -197.47797 -473.7137420
5  2000     5 -259.07928 -372.4563522
39
ответ дан Striezel 17 August 2018 в 12:30
поделиться
  • 1
    Функция recast (также из reshape2) объединяет функции melt и dcast в один ход для таких задач: recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month")) – Jaap 13 May 2016 в 06:17

Поздно к партии, но недавно нашел другой способ получить сводную статистику.

library(psych) describe(data)

Будет выводиться: среднее, мин, максимальное, стандартное отклонение, n, стандартная ошибка, эксцесс, асимметрия, медиана и диапазон для каждой переменной.

0
ответ дан britt 17 August 2018 в 12:30
поделиться

Да, в вашем formula вы можете cbind числовые переменные быть агрегированными:

aggregate(cbind(x1, x2) ~ year + month, data = df1, sum, na.rm = TRUE)
   year month         x1          x2
1  2000     1   7.862002   -7.469298
2  2001     1 276.758209  474.384252
3  2000     2  13.122369 -128.122613
...
23 2000    12  63.436507  449.794454
24 2001    12 999.472226  922.726589

См. ?aggregate, аргумент formula и примеры.

162
ответ дан Henrik 17 August 2018 в 12:30
поделиться
  • 1
    Возможно ли использовать cbind динамические переменные? – pdb 13 November 2015 в 06:29
  • 2
    Стоит отметить, что когда какая-либо из переменных, которая находится в cbind, имеет NA, строка будет сброшена для каждой переменной в cbind. Это не то поведение, которое я ожидал. – pdb 13 November 2015 в 07:19
  • 3
    что, если я вместо x1 и x2 хочу использовать все остальные переменные (кроме года, месяца) – Clock Slave 16 March 2016 в 12:22
  • 4
    @ClockSlave, тогда вам нужно просто использовать . на LHS. aggregate(. ~ year + month, df1, sum, na.rm = TRUE). В этом примере sum для "даты" не имеет смысла, хотя .... – A5C1D2H2I1M1N2O1R2T1 21 March 2016 в 04:53
  • 5
    Что делать, если мне не нужны две переменные, но две функции ?. Например, среднее значение и sd. – skan 14 April 2016 в 19:15

С пакетом dplyr вы можете использовать функции summarise_all, summarise_at или summarise_if для одновременного объединения нескольких переменных. Для примера набора данных вы можете сделать это следующим образом:

library(dplyr)
# summarising all non-grouping variables
df2 <- df1 %>% group_by(year, month) %>% summarise_all(sum)

# summarising a specific set of non-grouping variables
df2 <- df1 %>% group_by(year, month) %>% summarise_at(vars(x1, x2), sum)
df2 <- df1 %>% group_by(year, month) %>% summarise_at(vars(-date), sum)

# summarising a specific set of non-grouping variables based on condition (class)
df2 <- df1 %>% group_by(year, month) %>% summarise_if(is.numeric, sum)

Результат двух последних опций:

    year month        x1         x2
   <dbl> <dbl>     <dbl>      <dbl>
1   2000     1 -73.58134  -92.78595
2   2000     2 -57.81334 -152.36983
3   2000     3 122.68758  153.55243
4   2000     4 450.24980  285.56374
5   2000     5 678.37867  384.42888
6   2000     6 792.68696  530.28694
7   2000     7 908.58795  452.31222
8   2000     8 710.69928  719.35225
9   2000     9 725.06079  914.93687
10  2000    10 770.60304  863.39337
# ... with 14 more rows

Примечание: summarise_each устарел в пользу summarise_all, summarise_at и summarise_if.


Как упоминалось в моем комментарии выше , вы также можете использовать функцию recast из reshape2 - пакет:

library(reshape2)
recast(df1, year + month ~ variable, sum, id.var = c("date", "year", "month"))

, который даст вам тот же результат.

43
ответ дан Jaap 17 August 2018 в 12:30
поделиться
43
ответ дан Jaap 6 September 2018 в 09:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: