gpt4 book ai didi

带条件语句的前一行的 R data.table 值

转载 作者:行者123 更新时间:2023-12-02 18:01:23 25 4
gpt4 key购买 nike

我想根据数据表值是否满足条件来更新它,并返回另一列中的值或上一行(同一列)中的值。举个例子:

library( data.table )
data <- data.table( Col1 = 1:5, Col2 = letters[1:5] )

我想返回以下内容:

data2 <- data.table( Col1= 1:5, Col2= letters[1:5], Col3= c("NA", "NA", "3", "3", "3"))

我已阅读 ?shift 帮助页面,但无法将其调整为使用条件语句并在同一列中返回值。为了获得我想要的结果,我尝试过:

data[ , ( Col3 ) := ifelse( get( Col2 ) == "c", get( Col1 ) , shift( Col3 ))]

如果您能提供一些建议,我将不胜感激。

*请忽略我在本示例中使用的 get(),因为我知道这可能不是最好的方法。

最佳答案

这个迄今为止尚未得到解答的老问题最近又被重新提起。

截至今天,我知道以下方法:

1。 zoo::na.locf()

根据Frank's comment :

data3 <- data.table(Col1= 1:10, Col2 = c(letters[1:5],letters[1:5]))
data3[Col2=='c', Col3 := Col1][, Col3 := zoo::na.locf(Col3, na.rm=FALSE)]
data3[]
    Col1 Col2 Col3
1: 1 a NA
2: 2 b NA
3: 3 c 3
4: 4 d 3
5: 5 e 3
6: 6 a 3
7: 7 b 3
8: 8 c 8
9: 9 d 8
10: 10 e 8

2。 cumsum()

data3 <- data.table(Col1= 1:10, Col2 = c(letters[1:5],letters[1:5]))
data3[, Col3 := Col1[which(Col2 == "c")], by = cumsum(Col2 == "c")]
data3[]
    Col1 Col2 Col3
1: 1 a NA
2: 2 b NA
3: 3 c 3
4: 4 d 3
5: 5 e 3
6: 6 a 3
7: 7 b 3
8: 8 c 8
9: 9 d 8
10: 10 e 8

关于带条件语句的前一行的 R data.table 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33786372/

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