gpt4 book ai didi

R data.table 包中的行引用

转载 作者:行者123 更新时间:2023-12-04 14:00:23 24 4
gpt4 key购买 nike

假设我有以下示例数据集:

iris <- data.table(iris)[c(1:5,51:55,101:105), list(ID=.I, Species,Sepal.Length)]

然后说我想计算组内行之间的绝对差异(在本例中为 Species )。
iris[ , SL.Diff := c(NA,abs(diff(Sepal.Length))) , by = Species]

此时,我有一个如下所示的数据集:
   ID    Species Sepal.Length SL.Diff
1: 1 setosa 5.1 NA
2: 2 setosa 4.9 0.2
3: 3 setosa 4.7 0.2
4: 4 setosa 4.6 0.1
5: 5 setosa 5.0 0.4
6: 6 versicolor 7.0 NA

现在我想计算一个新变量 Sepal.Length2如果 SL.Diff,则取下一行的值小于阈值 0.3。
iris[ , Sepal.Length2 := ifelse(SL.Diff < 0.3, iris[ID+1]$Sepal.Length, Sepal.Length)]

这按照我想要的方式工作。但是,如果我想做相同的比较,而不是采用下一行,而是想要采用上一行的值呢?
iris[ , Sepal.Length3 := ifelse(SL.Diff < 0.3, iris[ID-1]$Sepal.Length, Sepal.Length)]
Sepal.Length3没有给出我期望的输出。有谁知道我在这里做错了什么?
    ID    Species Sepal.Length SL.Diff Sepal.Length2 Sepal.Length3
1: 1 setosa 5.1 NA NA NA
2: 2 setosa 4.9 0.2 4.7 4.9
3: 3 setosa 4.7 0.2 4.6 4.7
4: 4 setosa 4.6 0.1 5.0 4.6
5: 5 setosa 5.0 0.4 5.0 5.0
6: 6 versicolor 7.0 NA NA NA
7: 7 versicolor 6.4 0.6 6.4 6.4
8: 8 versicolor 6.9 0.5 6.9 6.9
9: 9 versicolor 5.5 1.4 5.5 5.5
10: 10 versicolor 6.5 1.0 6.5 6.5
11: 11 virginica 6.3 NA NA NA
12: 12 virginica 5.8 0.5 5.8 5.8
13: 13 virginica 7.1 1.3 7.1 7.1
14: 14 virginica 6.3 0.8 6.3 6.3
15: 15 virginica 6.5 0.2 NA 5.1

最佳答案

不确定这对速度的影响,但这是另一种尝试:

# make a column of the next values using head()
iris[, S3 := c(NA,head(Sepal.Length,-1)), by=Species]
# overwrite those values not meeting your criteria with the original values
iris[ !(SL.Diff < 0.3), S3 := Sepal.Length]

iris
# ID Species Sepal.Length SL.Diff S3
# 1: 1 setosa 5.1 NA NA
# 2: 2 setosa 4.9 0.2 5.1
# 3: 3 setosa 4.7 0.2 4.9
# 4: 4 setosa 4.6 0.1 4.7
# 5: 5 setosa 5.0 0.4 5.0
# 6: 6 versicolor 7.0 NA NA
# 7: 7 versicolor 6.4 0.6 6.4
# 8: 8 versicolor 6.9 0.5 6.9
# 9: 9 versicolor 5.5 1.4 5.5
#10: 10 versicolor 6.5 1.0 6.5
#11: 11 virginica 6.3 NA NA
#12: 12 virginica 5.8 0.5 5.8
#13: 13 virginica 7.1 1.3 7.1
#14: 14 virginica 6.3 0.8 6.3
#15: 15 virginica 6.5 0.2 6.3

关于R data.table 包中的行引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25072559/

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