Spo*_*DLX 5 r sum matrix dplyr tidyverse
我正在尝试从 Excel 迁移到 R,并希望做一些类似于SumIfs
Excel 的事情。我想创建一个新列,它是多列中的行的总和,但前提是该值大于 25。
我的数据如下所示,这是农场中不同作物的面积,并且想要添加一个新的农业总面积列,但仅包括超过 25 英亩的作物:
道具ID | 状态 | 牧场 | 大豆 | 玉米 |
---|---|---|---|---|
1 | 威斯康辛 | 20 | 45 | 75 |
2 | 明尼苏达州 | 10 | 80 | 122 |
3 | 明尼苏达州 | 152 | 0 | 15 |
4 | 伊尔 | 0 | 10 | 99 |
5 | 伊尔 | 75 | 38 | 0 |
6 | 威斯康辛 | 30 | 45 | 0 |
7 | 威斯康辛 | 68 | 55 | 0 |
我正在寻找一个像这样的新表:
道具ID | 状态 | 牧场 | 大豆 | 玉米 | 总计标签 |
---|---|---|---|---|---|
1 | 威斯康辛 | 20 | 45 | 75 | 120 |
2 | 明尼苏达州 | 10 | 80 | 122 | 第202章 |
3 | 明尼苏达州 | 152 | 0 | 15 | 152 |
4 | 伊尔 | 0 | 10 | 20 | 0 |
5 | 伊尔 | 15 | 15 | 20 | 0 |
6 | 威斯康辛 | 30 | 45 | 0 | 75 |
7 | 威斯康辛 | 50 | 55 | 0 | 105 |
我想使用索引 [3:5] 而不是名称来引用列进行求和,因为我在不同的数据集中有不同的作物。
我假设使用 mutate 或 summarize 来完成我需要做的事情,但我无法弄清楚。
我们可以将那些值小于 25 的行替换为 NA 或 0,然后使用rowSums
library(dplyr)
df1 <- df1 %>%
mutate(Total_ag = rowSums(across(where(is.numeric),
~ replace(.x, .x < 25, NA)), na.rm = TRUE))
Run Code Online (Sandbox Code Playgroud)
类似的选项在base R
df1$Total_ag <- rowSums(replace(df1[3:5], df1[3:5] < 25, NA), na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)