gpt4 book ai didi

r - 比较第 1 列(第 1 列)中的连续值并使用第 1 列后比较结果创建新列(第 2 列)

转载 作者:行者123 更新时间:2023-12-03 23:10:00 28 4
gpt4 key购买 nike

我是 R 新手,正在问一个非常基本的问题。当然,我在尝试从所提供的示例中获取指导​​的同时做了功课herehere ,但无法在我的案例中实现这个想法,即可能是由于我的问题中的比较维度更大。

我的实际数据有数百列和数百万行,但为了简单起见,我只粘贴感兴趣的一列。 “潜力”列可以有 1、2 或 3,如下所示:

S.No     Potential
1 -
2 1
3 2
4 3
5 1
6 2
7 3
8 1
9 2
10 3
11 3
12 1
13 1
14 2
15 1
16 3
17 2
18 1
19 2
20 2
21 2
22 3
23 1
24 3
25 2
26 3
27 3

我想比较最后一列(此处为“Potential”列)的值,以便将每个 [i] 行与其直接前一行 [i-1] 进行比较,并基于此比较,我想要一个具有一些预定义值的新列(例如挑战列)。这是我想要实现的伪代码:

if(Potential[i-1] == 1 && Potential[i] == 1 then Challenge[i] <- 1
if(Potential[i-1] == 1 && Potential[i] == 2 then Challenge[i] <- 2
if(Potential[i-1] == 1 && Potential[i] == 3 then Challenge[i] <- 3

if(Potential[i-1] == 2 && Potential[i] == 1 then Challenge[i] <- 4
if(Potential[i-1] == 2 && Potential[i] == 2 then Challenge[i] <- 5
if(Potential[i-1] == 2 && Potential[i] == 3 then Challenge[i] <- 6

if(Potential[i-1] == 3 && Potential[i] == 1 then Challenge[i] <- 7
if(Potential[i-1] == 3 && Potential[i] == 2 then Challenge[i] <- 8
if(Potential[i-1] == 3 && Potential[i] == 3 then Challenge[i] <- 9

正确的最终输出将是这样的:

 S.No     Potential       Challenge
1 2 -
2 1 4
3 2 2
4 3 6
5 1 7
6 2 2
7 3 6
8 1 so on
9 2
10 3
11 3
12 1
13 1
14 2
15 1
16 3
17 2
18 1
19 2
20 2
21 2
22 3
23 1
24 3
25 2
26 3
27 3

另外,由于我的数据很大,我可以避免循环吗?感谢您对此的预期指导。非常感谢!

P.S:我确实尝试了很多自己的语法,但我没有将其粘贴到这里,因为它可能会造成不必要的干扰。

最佳答案

您可以尝试使用data.table包结合shiftReduce功能。由于您的逻辑有点接近三进制数字系统,因此新列可以计算为Potential[i] + 3 * (Potential[i-1] - 1) ,这里的y对应于Potential列的滞后值,它实际上是Potential[i-1]

library(data.table)

DASlaneoverall$Potential <- as.numeric(DASlaneoverall$Potential)
setDT(DASlaneoverall)[, Challenge := Reduce(function(x, y) x + 3 * (y - 1),
shift(Potential, n = 0:1, type = "lag"))]

DASlaneoverall
S.No Potential Challenge
1: 1 2 NA
2: 2 1 4
3: 3 2 2
4: 4 3 6
5: 5 1 7
6: 6 2 2
7: 7 3 6
8: 8 1 7
9: 9 2 2
10: 10 3 6
11: 11 3 9
12: 12 1 7
13: 13 1 1
14: 14 2 2
15: 15 1 4
16: 16 3 3
17: 17 2 8
18: 18 1 4
19: 19 2 2
20: 20 2 5
21: 21 2 5
22: 22 3 6
23: 23 1 7
24: 24 3 3
25: 25 2 8
26: 26 3 6
27: 27 3 9
S.No Potential Challenge

关于r - 比较第 1 列(第 1 列)中的连续值并使用第 1 列后比较结果创建新列(第 2 列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37369134/

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