R 比较下部节点和上部节点的最大值
我有一个相当复杂的问题。我有不同的公司,也有不同的买家。此外,我也有不同的产品,可以多达15种产品。 所有产品都有R 比较下部节点和上部节点的最大值,r,statistics,R,Statistics,我有一个相当复杂的问题。我有不同的公司,也有不同的买家。此外,我也有不同的产品,可以多达15种产品。 所有产品都有价格。此价格适用于不同的产品集,在我的示例中,这些产品集的名称为产品集1到产品集6 现在,我想遍历所有公司,检查他们的买家,并测试所有产品的价格是否设置为1到6(在我的示例中)是产品-所有节点上的最大值,用于选择相同的公司和买家 我举了一个例子: > dput(sys) structure(list(Company = c("Company 1", "Company 2", "
价格
。此价格
适用于不同的产品集,在我的示例中,这些产品集的名称为产品集1
到产品集6
现在,我想遍历所有公司
,检查他们的买家
,并测试所有产品的价格是否设置为1到6(在我的示例中)
是产品-所有
节点上的最大值,用于选择相同的公司
和买家
我举了一个例子:
> dput(sys)
structure(list(Company = c("Company 1", "Company 2", "Company 3",
"Company 2", "Company 2", "Company 2", "Company 3", "Company 3",
"Company 5", "Company 5", "Company 5", "Company 2", "Company 2",
"Company 2", "Company 2", "Company 2"), Buyer = c("Buyer 1",
"Buyer 2", "Buyer 1", "Buyer 1", "Buyer 1", "Buyer 2", "Buyer 2",
"Buyer 1", "Buyer 3", "Buyer 1", "Buyer 3", "Buyer 2", "Buyer 2",
"Buyer 2", "Buyer 2", "Buyer 2"), Products = c("Product - ALL",
"Product - Set 1", "Product - Set 2", "Product - Set 1", "Product - ALL",
"Product - ALL", "Product - ALL", "Product - Set 1", "Product - ALL",
"Product - Set 1", "Product - Set 2", "Product - Set 2", "Product - Set 3",
"Product - Set 4", "Product - Set 5", "Product - Set 6"), Price = c(NA,
10L, 99L, 13L, 13L, 12L, 99L, 99L, 100L, 100L, 100L, 12L, NA,
11L, 0L, 12L)), .Names = c("Company", "Buyer", "Products", "Price"
), row.names = c(NA, -16L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x0000000000100788>)
>
> df <- sys[ (sys$Company =="Company 2" & sys$Buyer == "Buyer 2"), ]
>
> #replace all NAs with 0
> df[is.na(df)] <- 0
>
> #Fill control column with null
> df$ControlColumn <- "null"
>
> if(grep("Product - ALL", df)) {
+ i <- grep("Product - ALL", df)
+ prodSet1 <- grep("Product - Set 1", df$Products)
+ prodSet2 <- grep("Product - Set 2", df$Products)
+ prodSet3 <- grep("Product - Set 3", df$Products)
+ prodSet4 <- grep("Product - Set 4", df$Products)
+ prodSet5 <- grep("Product - Set 5", df$Products)
+ prodSet6 <- grep("Product - Set 6", df$Products)
+ val <- max(df[prodSet1]$Price, df[prodSet2]$Price,df[prodSet3]$Price,df[prodSet4]$Price,df[prodSet5]$Price,df[prodSet6]$Price)
+ df[i]$Price == val
+ df[i]$ControlColumn <- (df[i]$Price == val)
+ }
>dput(系统)
结构(列表)(公司=c(“公司1”、“公司2”、“公司3”),
“第二公司”、“第二公司”、“第二公司”、“第三公司”、“第三公司”,
“第五公司”、“第五公司”、“第五公司”、“第二公司”、“第二公司”,
“2号公司”、“2号公司”、“2号公司”),买方=c(“1号买方”,
“买方2”、“买方1”、“买方1”、“买方1”、“买方2”、“买方2”,
“买方1”、“买方3”、“买方1”、“买方3”、“买方2”、“买方2”,
“买方2”、“买方2”、“买方2”),产品=c(“产品-全部”,
“产品-集1”、“产品-集2”、“产品-集1”、“产品-全部”,
“产品-全部”、“产品-全部”、“产品集1”、“产品-全部”,
“产品集1”、“产品集2”、“产品集2”、“产品集3”,
“第四套产品”、“第五套产品”、“第六套产品”),价格=c(不适用,
10L,99L,13L,13L,12L,99L,99L,100L,100L,12L,NA,
11升、0升、12升),名称=c(“公司”、“买方”、“产品”、“价格”
),row.names=c(NA,-16L),class=c(“data.table”,“data.frame”
),.internal.selfref=)
>
>df
>#将所有NAs替换为0
>df[is.na(df)]
>#用null填充控制列
>df$ControlColumn
>if(grep(“产品-全部”,df)){
+i您可以更好地利用以下事实:您的sys
数据集是一个data.table
首先,您可以为给定的公司
和买家找到价格最高的产品
(我们不希望这些产品是产品-所有
):
现在,所有“产品-所有”条目都可以替换为更新的条目:
result <- rbind(all.prods,sys[Products!='Product - ALL'])
谢谢您的回答!排序后,我如何显示Produc-All price是否正确地表示较低节点的聚合值?因为我的目标是检查而不是替换?我基本上想要一个列,如果计算正确,则将Product-All
节点标记为TRUE
。您可以尝试sys吗[,ControlColumn:=(Products='Product-ALL'&Price==max(Price,na.rm=T)),by=.(Company,Buyer)]
看看它是否能产生您期望的结果?
all.prods <- max.prices
all.prods[,Products:='Product - ALL']
# Company Buyer Products Price
# 1: Company 2 Buyer 2 Product - ALL 12
# 2: Company 3 Buyer 1 Product - ALL 99
# 3: Company 2 Buyer 1 Product - ALL 13
# 4: Company 5 Buyer 1 Product - ALL 100
# 5: Company 5 Buyer 3 Product - ALL 100
result <- rbind(all.prods,sys[Products!='Product - ALL'])
setkey(result,Company,Buyer)
result
# Company Buyer Products Price
# 1: Company 2 Buyer 1 Product - ALL 13
# 2: Company 2 Buyer 1 Product - Set 1 13
# 3: Company 2 Buyer 2 Product - ALL 12
# 4: Company 2 Buyer 2 Product - Set 1 10
# 5: Company 2 Buyer 2 Product - Set 2 12
# 6: Company 2 Buyer 2 Product - Set 3 NA
# 7: Company 2 Buyer 2 Product - Set 4 11
# 8: Company 2 Buyer 2 Product - Set 5 0
# 9: Company 2 Buyer 2 Product - Set 6 12
# 10: Company 3 Buyer 1 Product - ALL 99
# 11: Company 3 Buyer 1 Product - Set 2 99
# 12: Company 3 Buyer 1 Product - Set 1 99
# 13: Company 5 Buyer 1 Product - ALL 100
# 14: Company 5 Buyer 1 Product - Set 1 100
# 15: Company 5 Buyer 3 Product - ALL 100
# 16: Company 5 Buyer 3 Product - Set 2 100