gpt4 book ai didi

r - 如何在data.table中选择一个值?

转载 作者:行者123 更新时间:2023-12-05 00:27:29 26 4
gpt4 key购买 nike

我的数据是以下形式

structure(list(atp = c(1, 0, 1, 0, 0, 1), len = c(2, NA, 3, NA, 
NA, 1), Day_1 = c(8, 7, 8, 9, 6, 6), Day_2 = c(94, 94, 102, 97,
102, 100), Day_3 = c(104, 162, 133, 142, 96, 122)), .Names = c("atp",
"len", "Day_1", "Day_2", "Day_3"), row.names = c(NA, -6L), class = "data.frame")

我想获得以下输出
structure(list(atp = c(1, 0, 1, 0, 0, 1), len = c(2, NA, 3, NA, 
NA, 1), Day_1 = c(8, 7, 8, 9, 6, 6), Day_2 = c(94, 94, 102, 97,
102, 100), Day_3 = c(104, 162, 133, 142, 96, 122), output = c(94,
NA, 133, NA, NA, 6)), .Names = c("atp", "len", "Day_1", "Day_2",
"Day_3", "output"), row.names = c(NA, -6L), class = "data.frame")

这基本上取决于第 2 列的值,它从第 3、4 或 5 列中选择值。

我是通过以下代码实现的
result<-cbind(y, output=apply(y, 1, function(r) r[r["len"]+2]))

但是这个过程非常耗时。有什么办法可以加快这个过程吗?我如何为此使用 data.tables?

最佳答案

一种可能的方法:

result <- cbind(y, 
output = unlist(y[3:5])[nrow(y) * (y$len -1) + seq.int(nrow(y))])

另一个(这应该更快):
result <- cbind(y, output = y[3:5][cbind(seq.int(nrow(y)), y$len)])

这两种方法都会导致:
#   atp len Day_1 Day_2 Day_3 output
# 1 1 2 8 94 104 94
# 2 0 NA 7 94 162 NA
# 3 1 3 8 102 133 133
# 4 0 NA 9 97 142 NA
# 5 0 NA 6 102 96 NA
# 6 1 1 6 100 122 6

关于r - 如何在data.table中选择一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20538638/

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