gpt4 book ai didi

R - 通过组合一列中的值来匹配一个值

转载 作者:行者123 更新时间:2023-12-03 04:46:51 28 4
gpt4 key购买 nike

我有一个包含两列的数据框,如下所示:

    Col1       Col2
1 7197.36 14.00
2 NA 5173.94
3 NA 13333.06
4 7004.38 473.32
5 NA 4980.61
6 26355.52 110.05
7 NA 1307.32
8 NA 6531.06
9 NA 3777.65
10 NA 7827.44
11 8753.22 85.00
12 NA 1.86
13 NA 2009.42
14 NA 502.89
15 NA 3182.86
16 NA NA

我想在“Col2”列中查找与“Col1”中的单个值相对应的匹配行。例如,7197.36 = 14.00 + 5173.94 + 2009.42(“Col2”中的第 1、2、13 行)

这里,'Col1' 的总和 = 'Col2' 的总和

最终的数据框应如下所示:

   Col1    Col2
1 7197.36 14.00
2 NA 5173.94
3 NA 2009.42
4 7004.38 473.32
5 NA 6531.06
6 26355.52 110.05
7 NA 1307.32
8 NA 13333.06
9 NA 3777.65
10 NA 7827.44
11 8753.22 85.00
12 NA 1.86
13 NA 4980.61
14 NA 502.89
15 NA 3182.86
16 NA NA

有人可以帮我吗?

最佳答案

我们通过整数线性规划来解决这个问题,解决寻找大于或等于目标的最小目标值的问题,如果找到在数值精度范围内则返回它;否则,返回NULL。

library(lpSolve)

obj <- na.omit(DF$Col2)
targets <- na.omit(DF$Col1)
L <- lapply(targets, function(value) {
iobj <- 100 * obj
ivalue <- 100 * value
res <- lp("min", iobj, t(iobj), ">=", ivalue, all.bin = TRUE)
ok <- isTRUE(all.equal(ivalue, res$objval))
if (ok) obj[res$solution == 1]
})
names(L) <- targets

给予:

> L

$`7197.36`
[1] 14.00 5173.94 2009.42

$`7004.38`
[1] 473.32 6531.06

$`26355.52`
[1] 13333.06 110.05 1307.32 3777.65 7827.44

$`8753.22`
[1] 4980.61 85.00 1.86 502.89 3182.86

注1:后来问题被修改为请求这种形式的输出:

transform(stack(L), Col1 = ifelse(duplicated(ind), NA, as.numeric(paste(ind))), 
Col2 = values)[3:4]

注释 2:我们将其用作 DF

Lines <- "    Col1       Col2
1 7197.36 14.00
2 NA 5173.94
3 NA 13333.06
4 7004.38 473.32
5 NA 4980.61
6 26355.52 110.05
7 NA 1307.32
8 NA 6531.06
9 NA 3777.65
10 NA 7827.44
11 8753.22 85.00
12 NA 1.86
13 NA 2009.42
14 NA 502.89
15 NA 3182.86
16 NA NA"

DF <- read.table(text = Lines, header = TRUE)

关于R - 通过组合一列中的值来匹配一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33855119/

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