如果列的值在 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_by
和 summarise
:
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
我有一个非常大的数据框。让下面的 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_by
和 summarise
:
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