gpt4 book ai didi

r - 在 R 中将不规则数据转换为可用格式

转载 作者:行者123 更新时间:2023-12-01 12:34:41 26 4
gpt4 key购买 nike

假设我在一家为其客户提供多种不同服务的公司工作。我已收到一份有关所提供服务的数据报告,我需要对其进行分析。报告格式易于阅读和打印,但不适合数据分析。

报告格式如下:

输入:

customer <- c(1,2,2,3,3,3)
service1 <- c(1,3,5,1,3,5)
fee1 <- c(100,290,500,100,300,500)
service2 <- c("",4,"",2,4,8)
fee2 <- c("",400,"",200,390,800)

require(data.table)
DT <- data.table(customer, service1, fee1, service2, fee2)

打印到:

> DT
customer service1 fee1 service2 fee2
1: 1 1 100
2: 2 3 290 4 400
3: 2 5 500
4: 3 1 100 2 200
5: 3 3 300 4 390
6: 3 5 500 8 800

有许多客户,每个客户都有他们消费的一些服务和相应的费用。服务和费用水平打印在四列中,然后溢出到新的一行中。每个客户可以有任意数量的服务,但每个服务只能为每个客户提供一次,并且每个客户的服务费用可能不同。它们可能总是以相同的顺序打印,但解决方案不应依赖于此。

任务是将数据转换为可用格式。我看到两种不同的方法来做到这一点。

第一个选项(长格式):切掉最后两列,为每个客户创建一个新行,然后填写内容。

选项一看起来像这样:

    customer service fee
1: 1 1 100
2: 2 3 290
3: 2 4 400
4: 2 5 500
5: 3 1 100
6: 3 2 200
7: 3 3 300
8: 3 4 390
9: 3 5 500
10: 3 8 800

第二个选项(宽格式):为每个客户切掉除第一行以外的所有行,为切掉的服务创建新列,然后将服务标签转换为列标题(并确保一切都在正确的位置) .

选项二看起来像这样:

   customer service.1 service.2 service.3 service.4 service.5 service.6 service.7 service.8
1: 1 100
2: 2 290 400 500
3: 3 200 300 390 500 800

我可以使用任何一种格式(长宽之间的转换相当容易)。

作为起点,我认为我必须找到每个客户的服务数量(选项 1)或独特服务的数量(选项 2),将数据表扩展到所需的大小并四处移动数据。

我觉得 data.table 应该能够处理这个问题,并且由于它的效率,我更喜欢使用这个包的解决方案。

最佳答案

我不知道如何使用 melt 解决这个问题,但是您可以在这里使用一个简单的 rbind,例如

res <- rbind(DT[, c(1,2:3)], 
DT[, c(1,4:5)],
use.names = FALSE)[service1 != ""]
res
# customer service1 fee1
# 1: 1 1 100
# 2: 2 3 290
# 3: 2 5 500
# 4: 3 1 100
# 5: 3 3 300
# 6: 3 5 500
# 7: 2 4 400
# 8: 3 2 200
# 9: 3 4 390
# 10: 3 8 800

根据你的第二个输出,你可以尝试类似的东西

Range <- range(as.numeric(unlist(DT[, c(1, 4)])), na.rm = TRUE)
res[, service1 := factor(service1, levels = Range[1L]:Range[2L])]
dcast(res, customer ~ service1, drop = FALSE, fill = "", value.var = "fee1")
# customer 1 2 3 4 5 6 7 8
# 1: 1 100
# 2: 2 290 400 500
# 3: 3 100 200 300 390 500 800

关于r - 在 R 中将不规则数据转换为可用格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30842806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com