r - 在字符串中排序名称并汇总订单号
问题描述
我正在处理两个小问题。结果应该是第三个小标题。第一个小标题(顺序)定义了名称的顺序。此顺序应应用于第二个小标题 (df)。
order <- tibble(order = c(1, 2, 3, 4, 5, 6),
names = c("Christine", "Bernward", "Daniel", "Atze", "Franz", "Emil"))
print(order)
# A tibble: 6 x 2
order names
<dbl> <chr>
1 1 Christine
2 2 Bernward
3 3 Daniel
4 4 Atze
5 5 Franz
6 6 Emil
df <- tibble(names_combined = c("Atze, Christine", "Bernward, Christine",
"Emil, Daniel", "Atze, Franz", "Franz, Bernward, Christine"))
print(df)
# A tibble: 5 x 1
names_combined
<chr>
1 Atze, Christine
2 Bernward, Christine
3 Emil, Daniel
4 Atze, Franz
5 Franz, Bernward, Christine
如您所见,df 中的第一个值是“Atze, Christine”,但它应该是“Christine, Atze”,因为 Christine 排在第一位,而 Atze 排在第四位。这应该适用于 tibble df 中的所有值。重要的是,保持结构。所以它应该是“name1,name2”,用逗号和空格分隔它们。
作为第二列,应将每个组合的订单数相加。所以 Christine 作为 1 和 Atze 作为 4 应该是 5 等等。
结果应如下所示:
result <- tibble(names_combined = c("Christine, Atze", "Christine, Bernward",
"Daniel, Emil", "Atze, Franz", "Christine, Bernward, Franz"),
order_combined = c(5, 3, 9, 9, 8))
print(result)
# A tibble: 5 x 2
names_combined order_combined
<chr> <dbl>
1 Christine, Atze 5
2 Christine, Bernward 3
3 Daniel, Emil 9
4 Atze, Franz 9
5 Christine, Bernward, Franz 8
我正在考虑一种方法,例如将 df 中的 names_combined 拆分为其元素,然后将它们与订单重新组合,但这似乎太难了。也许有一个更直接的解决方案。
解决方案
使用输入数据“df”,使用 ) 创建一个序列列,使用(from )row_number()
拆分“names_combined”,使用“order”数据集、带有“rn”的行和“order”列,然后按以下方式分组'rn', 'names_combined' with while 获取or 'order' 列separate_rows
tidyr
left_join
arrange
paste
toString
sum
summarise
library(dplyr)
library(tidyr)
df %>%
mutate(rn = row_number()) %>%
separate_rows(names_combined) %>%
left_join(order, by = c("names_combined" = "names")) %>%
arrange(rn, order) %>%
group_by(rn) %>%
summarise(names_combined = toString(names_combined),
order_combined = sum(order), .groups = 'drop') %>%
select(-rn)
-输出
# A tibble: 5 x 2
# names_combined order_combined
# <chr> <dbl>
#1 Christine, Atze 5
#2 Christine, Bernward 3
#3 Daniel, Emil 9
#4 Atze, Franz 9
#5 Christine, Bernward, Franz 8
推荐阅读
- python - Pyodbc + SQLA - 通信链路故障
- angular - 如何将 Firebase 查询快照转换为对象数组
- ios - iOS - 在 SwiftUI 中将键盘按键检测为字符串
- c# - 如何将文本文件转换为字典
? - django - Django DataError 索引超出 postrgresql 范围
- java - 在 OpenCV 中删除检测到的颜色条
- c++11 - 将指向同一派生类实例的任何指针向上转换为虚拟基指针将始终返回相同的地址?C++
- apache-spark - Spark 中的 coalesce + orderBy 是可交换的吗?
- powershell - 在命名的 PowerShell 参数中提供示例
- sonarqube - 按人过滤 SonarQube 覆盖范围?