gpt4 book ai didi

R中数据表的按行逻辑操作

转载 作者:行者123 更新时间:2023-12-02 05:00:24 25 4
gpt4 key购买 nike

我必须在数据表中执行逐行逻辑运算,让我用例子来解释一下。假设我有如下所示的数据表 (DT)

V1      V2        V3        V4      V5 
AAE CDG 2 0 0
AAE CDG 2 5 5
AAE ORY 2 4 4
AAE ORY 2 0 0
AAE ORY 2 5 5
AAE ORY 2 3 3

现在,根据 V5 的值,我想在数据表中添加额外的列 V6,这是逻辑操作。我做了这样的事情来做到这一点-

DT[, V6 := if(V5 == 0){1
}else if(V5 == 1){2
}else if(V5 == 2){3
}else if(V5 == 3){4
}else if(V5 == 4){5
}else if(V5 == 5){6}
]

但这并没有给出想要的结果,应该是

V1   V2        V3      V4        V5   V6
AAE CDG 2 0 0 1
AAE CDG 2 5 5 6
AAE ORY 2 4 4 5
AAE ORY 2 0 0 1
AAE ORY 2 5 5 6
AAE ORY 2 3 3 4

鉴于给出以下结果-

 V1   V2       V3       V4       V5    V6
AAE CDG 2 0 0 1
AAE CDG 2 5 5 1
AAE ORY 2 4 4 1
AAE ORY 2 0 0 1
AAE ORY 2 5 5 1
AAE ORY 2 3 3 1

发生这种情况是因为在逻辑运算中使用了 V5 的第一个值(即 0),而不是一次动态地使用一个值或行值。如何更改 [,J] 参数以获得所需的结果。我可以使用 for 循环来执行此操作,但这样做的效率非常低。

最佳答案

你为什么不做

dat <- read.table(text= "V1      V2        V3        V4      V5 
+ AAE CDG 2 0 0
+ AAE CDG 2 5 5
+ AAE ORY 2 4 4
+ AAE ORY 2 0 0
+ AAE ORY 2 5 5
+ AAE ORY 2 3 3 ",header=TRUE)
dat$V6 <- dat$V5 + 1

正如@Steph 所说,您可以按如下方式创建映射表,然后合并列。

mapping <- data.frame(V5=c(0,1,2,3,4,5),V6=c(1,2,3,4,5,6))
merge(dat,mapping,by="V5")

关于R中数据表的按行逻辑操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17188380/

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