当其他列的对应值重复时,我想添加一列的值 R
I want to add the values of a column when the corresponding values of other columns are duplicates R
我有一个类似的问题:()但是这个解决方案对我不起作用或者我不知道如何修改它。
如果 Reference 和 NODCCODE 匹配,我需要将 Number 列值加在一起,即使 NODCCODE 在 Reference number 中不相邻。
我有这个:
structure(list(Reference = c("BBM101", "BBM102",
"BBM102", "BBM102", "BBM103", "BBM103",
"BBM104", "BBM105", "BBM105", "BBM105"),
NODCCODE = c("101","301", "201", "201", "201", "401", "401", "201", "102", "201"),
Number = c(2, 1, 3, 1, 3, 14, 3, 24, 2, 1)),
row.names = c(NA, 10L), class = "data.frame")
Reference NODCCODE Number
1 BBM101 101 2
2 BBM102 301 1
3 BBM102 201 3
4 BBM102 201 1
5 BBM103 201 3
6 BBM103 401 14
7 BBM104 401 3
8 BBM105 201 24
9 BBM105 102 2
10 BBM105 201 1
我想要这个:
structure(list(Reference = c("BBM101", "BBM102", "BBM102", "BBM103", "BBM103", "BBM104", "BBM105", "BBM105"),
NODCCODE = c("101","301", "201", "201", "401", "401", "201", "102"),
Number = c(2, 1, 4, 3, 14, 3, 25, 2)),
row.names = c(NA, 8L), class = "data.frame")
Reference NODCCODE Number
1 BBM101 101 2
2 BBM102 301 1
3 BBM102 201 4
4 BBM103 201 3
5 BBM103 401 14
6 BBM104 401 3
7 BBM105 201 25
8 BBM105 102 2
请注意第 3 行和第 4 行 Reference 和 NODCCODE 已合并,并添加了 Number 列。还有第 8 行和第 10 行,即使在 201 个值之间有一个 102 值,它们都具有相同的参考编号,因此添加了它们。我不关心剩下的行是在那组参考数字的开头还是结尾。
相信这么简单用tidyverse
? Reference 只有一个匹配的 NODCCODE 的总和将是唯一值,具有相同 reference 和 NODCCODE 的条目将被求和
library(tidyverse)
struct <- structure(list(Reference = c("BBM101", "BBM102",
"BBM102", "BBM102", "BBM103", "BBM103",
"BBM104", "BBM105", "BBM105", "BBM105"),
NODCCODE = c("101","301", "201", "201", "201", "401", "401", "201", "102", "201"),
Number = c(2, 1, 3, 1, 3, 14, 3, 24, 2, 1)),
row.names = c(NA, 10L), class = "data.frame")
result <- struct %>%
group_by(Reference,NODCCODE) %>%
summarise(Number = sum(Number)) %>%
arrange(Reference) %>%
ungroup()
result
#> # A tibble: 8 x 3
#> Reference NODCCODE Number
#> <chr> <chr> <dbl>
#> 1 BBM101 101 2
#> 2 BBM102 201 4
#> 3 BBM102 301 1
#> 4 BBM103 201 3
#> 5 BBM103 401 14
#> 6 BBM104 401 3
#> 7 BBM105 102 2
#> 8 BBM105 201 25
由 reprex package (v0.3.0)
于 2020-04-24 创建
如果您加载 data.table 包,将您的 data.frame 转换为 data.table(使用 setDT
),您可以这样做
unique(dt1[, Number := sum(Number), by = c("Reference", "NODCCODE")])
这里使用 dt[i, j, by]
表示法,将数字的总和重新分配给数字,该函数由引用和 NODCCODE 的唯一组合完成,并将其包装在 unqiue()
函数中以获得独特的行。
我有一个类似的问题:(
如果 Reference 和 NODCCODE 匹配,我需要将 Number 列值加在一起,即使 NODCCODE 在 Reference number 中不相邻。
我有这个:
structure(list(Reference = c("BBM101", "BBM102",
"BBM102", "BBM102", "BBM103", "BBM103",
"BBM104", "BBM105", "BBM105", "BBM105"),
NODCCODE = c("101","301", "201", "201", "201", "401", "401", "201", "102", "201"),
Number = c(2, 1, 3, 1, 3, 14, 3, 24, 2, 1)),
row.names = c(NA, 10L), class = "data.frame")
Reference NODCCODE Number
1 BBM101 101 2
2 BBM102 301 1
3 BBM102 201 3
4 BBM102 201 1
5 BBM103 201 3
6 BBM103 401 14
7 BBM104 401 3
8 BBM105 201 24
9 BBM105 102 2
10 BBM105 201 1
我想要这个:
structure(list(Reference = c("BBM101", "BBM102", "BBM102", "BBM103", "BBM103", "BBM104", "BBM105", "BBM105"),
NODCCODE = c("101","301", "201", "201", "401", "401", "201", "102"),
Number = c(2, 1, 4, 3, 14, 3, 25, 2)),
row.names = c(NA, 8L), class = "data.frame")
Reference NODCCODE Number
1 BBM101 101 2
2 BBM102 301 1
3 BBM102 201 4
4 BBM103 201 3
5 BBM103 401 14
6 BBM104 401 3
7 BBM105 201 25
8 BBM105 102 2
请注意第 3 行和第 4 行 Reference 和 NODCCODE 已合并,并添加了 Number 列。还有第 8 行和第 10 行,即使在 201 个值之间有一个 102 值,它们都具有相同的参考编号,因此添加了它们。我不关心剩下的行是在那组参考数字的开头还是结尾。
相信这么简单用tidyverse
? Reference 只有一个匹配的 NODCCODE 的总和将是唯一值,具有相同 reference 和 NODCCODE 的条目将被求和
library(tidyverse)
struct <- structure(list(Reference = c("BBM101", "BBM102",
"BBM102", "BBM102", "BBM103", "BBM103",
"BBM104", "BBM105", "BBM105", "BBM105"),
NODCCODE = c("101","301", "201", "201", "201", "401", "401", "201", "102", "201"),
Number = c(2, 1, 3, 1, 3, 14, 3, 24, 2, 1)),
row.names = c(NA, 10L), class = "data.frame")
result <- struct %>%
group_by(Reference,NODCCODE) %>%
summarise(Number = sum(Number)) %>%
arrange(Reference) %>%
ungroup()
result
#> # A tibble: 8 x 3
#> Reference NODCCODE Number
#> <chr> <chr> <dbl>
#> 1 BBM101 101 2
#> 2 BBM102 201 4
#> 3 BBM102 301 1
#> 4 BBM103 201 3
#> 5 BBM103 401 14
#> 6 BBM104 401 3
#> 7 BBM105 102 2
#> 8 BBM105 201 25
由 reprex package (v0.3.0)
于 2020-04-24 创建如果您加载 data.table 包,将您的 data.frame 转换为 data.table(使用 setDT
),您可以这样做
unique(dt1[, Number := sum(Number), by = c("Reference", "NODCCODE")])
这里使用 dt[i, j, by]
表示法,将数字的总和重新分配给数字,该函数由引用和 NODCCODE 的唯一组合完成,并将其包装在 unqiue()
函数中以获得独特的行。