【问题标题】:combine many rows into one , R [duplicate]将多行合二为一,R [重复]
【发布时间】:2018-08-01 11:16:33
【问题描述】:

我将此数据集保存为名为 s2 的矩阵

       [,1]
0         4
0.5       1
1         6
10       61
15       28
2         8
20       25
23        1
25        4
3         3
30       44

我想按行的名称对它们进行分组,例如

         [,1]
0-10      22
10-20     89
20-30     30
30-40     48

我想知道是否有其他方法(更快,因为我的数据集比这大得多)比s[1,]=s[1,]+s2[2,]+.. 然后删除所有行? 我尝试使用 aggregate ,并且我读到了一些关于 wordStem() 的内容,但我无处可去。 谢谢你

【问题讨论】:

  • 您需要将s2 转换为data.frame 并使用您最喜欢的数据修改工具(data.tabledplyr)来执行分组操作。或者,诅咒这个想法,使用tapply
  • df %>% mutate(var1 = floor(abs(df$var1) / 10)) %>% group_by(var1) %>% summarise(var2 = sum(var2))

标签: r


【解决方案1】:

假设您的矩阵是m,您可以这样做:

library(tidyverse)

# specify your breaks for the grouping
brks = c(0,10,20,30,40)

data.frame(m) %>%                              # create a dataframe from your matrix
  rownames_to_column() %>%                     # add rownames as a column
  mutate(rowname = as.numeric(rowname)) %>%    # make that column numeric (in order to group)
  group_by(group = cut(rowname, breaks = brks, right = F)) %>%  # use your breaks to group 
  summarise(m = sum(m)) %>%                    # get the sum of values for each group
  data.frame() %>%                             # create a dataframe from tibble (in order to have rownames)
  column_to_rownames("group")                  # add rownames from your group column

#          m
# [0,10)  22
# [10,20) 89
# [20,30) 30
# [30,40) 44

【讨论】:

  • 谢谢,非常有帮助!我只需要更改为 summarise(m=sum(group))
猜你喜欢
  • 2012-12-28
  • 2022-10-23
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
相关资源
最近更新 更多