如果列的值在 R 中有一些共同的行值,如何求和?

How to sum values of columns if they have some row values in common in R?

我有一个非常大的数据框。让下面的 df 代表它:

df <-as.data.frame(rbind(c("a",1,1,1),c("a",1,1,1),c("a",1,1,1),c("b",2,2,2),c("b",2,2,2),c("b",2,2,2)))
     [,1] [,2] [,3] [,4]
[1,] "a"  "1"  "1"  "1" 
[2,] "a"  "1"  "1"  "1" 
[3,] "a"  "1"  "1"  "1" 
[4,] "b"  "2"  "2"  "2" 
[5,] "b"  "2"  "2"  "2" 
[6,] "b"  "2"  "2"  "2"

我想创建一个如下所示的数据框:

     [,1] [,2] [,3] [,4]
 [1,] "a"  "3"  "3"  "3" 
 [2,] "b"  "6"  "6"  "6"

我在这里看到几个类似的帖子,但答案虽然非常有用,但需要一个向量 pf 第一列中的所有可能值等等。我的问题是我的数据集有大约 3000 行。

如何在 r 中获取结果?

我们可以使用aggregate

df <- type.convert(df, as.is = TRUE)
aggregate(.~ V1, df, FUN = sum)

-输出

   V1 V2 V3 V4
1  a  3  3  3
2  b  6  6  6

注意:OP 从 matrix 创建了 data.frame,而 matrix 只能容纳一个 class。因此,先进行类型转换

我们可以在使用 type.convert(as.is=TRUE) 之后使用 group_bysummarise:

library(dplyr)
df %>% 
    type.convert(as.is=TRUE) %>% 
    group_by(V1) %>% 
    summarise(across(V2:V4, sum))

  V1       V2    V3    V4
  <chr> <int> <int> <int>
1 a         3     3     3
2 b         6     6     6

另一个aggregate选项

> aggregate(. ~ V1, df, function(x) sum(as.numeric(x)))
  V1 V2 V3 V4
1  a  3  3  3
2  b  6  6  6