R数据框中每一行的类总计[重复]
Posted
技术标签:
【中文标题】R数据框中每一行的类总计[重复]【英文标题】:Class totals on each row in an R dataframe [duplicate] 【发布时间】:2022-01-22 10:10:59 【问题描述】:我在 R 中有如下数据框:
df <- matrix(c('A','A','A','A','B','B','B','B','C','C','C','C',4,6,8,2,2,7,2,8,9,1,2,5),ncol=2)
对于这个数据框的每一行,我想包括每个类(A、B、C)的总值,以便数据框看起来像这样:
df <- matrix(c('A','A','A','A','B','B','B','B','C','C','C','C',4,6,8,2,2,7,2,8,9,1,2,5,20,20,20,20,19,19,19,19,17,17,17,17),ncol=3)
我有什么办法可以做到这一点?
提前感谢您的帮助。
【问题讨论】:
您有矩阵,而不是数据框(因为您明确使用了matrix()
函数)。您可能确实需要数据框,因为矩阵只能保存一种数据类型,但数据框可以在每一列中保存不同的数据类型。
将数据放入数据框中后,您应该能够使用链接的常见问题解答中的任何答案来添加新列。使用dplyr
并从您的矩阵开始,您可以执行library(dplyr); df %>% as.data.frame %>% group_by(V1) %>% mutate(V2 = as.numeric(V2), total = sum(V2))
【参考方案1】:
使用 R 基础
df <- data.frame(df)
df$Total <- ave(as.numeric(df$X2), df$X1, FUN=sum)
【讨论】:
【参考方案2】:dplyr
的解决方案是这样的:
data.frame(df) %>%
group_by(X1) %>%
mutate(Sum = sum(as.numeric(X2)))
# A tibble: 12 × 3
# Groups: X1 [3]
X1 X2 Sum
<chr> <chr> <dbl>
1 A 4 20
2 A 6 20
3 A 8 20
4 A 2 20
5 B 2 19
6 B 7 19
7 B 2 19
8 B 8 19
9 C 9 17
10 C 1 17
11 C 2 17
12 C 5 17
【讨论】:
以上是关于R数据框中每一行的类总计[重复]的主要内容,如果未能解决你的问题,请参考以下文章