gpt4 book ai didi

返回其元素(列)均与引用向量匹配的行的索引

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

使用以下代码;

  c <- NULL
for (a in 1:4){
b <- seq(from = a, to = a + 5)
c <- rbind(c,b)
}
c <- rbind(c,c); rm(a,b)

结果在这个矩阵里,
> c
[,1] [,2] [,3] [,4] [,5] [,6]
b 1 2 3 4 5 6
b 2 3 4 5 6 7
b 3 4 5 6 7 8
b 4 5 6 7 8 9
b 1 2 3 4 5 6
b 2 3 4 5 6 7
b 3 4 5 6 7 8
b 4 5 6 7 8 9

如何为匹配特定输入的行返回行索引?

例如,搜索词为
z <- c(3,4,5,6,7,8)

我需要返回以下内容,
[1] 3 7

这将用于与时间步长列相关的测试数据的相当大的数据帧中,以通过累加匹配行的时间步长来减少数据。

问题被其他人很好地回答了。由于我的数据集大小(950万行),我想出了一种有效的方法,它采取了几个步骤。

1)对包含时间步长的大数据帧'dc'进行排序,以在第1列中进行累加。
dc <- dc[order(dc[,2],dc[,3],dc[,4],dc[,5],dc[,6],dc[,7],dc[,8]),]

2)创建一个具有唯一条目的新数据框(不包括第1列)。
dcU <- unique(dc[,2:8])

3)编写Rcpp(C++)函数以循环访问唯一的数据帧,该数据帧在行相等时循环遍历原始数据帧的累积时间,并在识别到不相等的行时索引到下一个for循环步骤。
  require(Rcpp)
getTsrc <-
'
NumericVector getT(NumericMatrix dc, NumericMatrix dcU)
{
int k = 0;
int n = dcU.nrow();
NumericVector tU(n);
for (int i = 0; i<n; i++)
{
while ((dcU(i,0)==dc(k,1))&&(dcU(i,1)==dc(k,2))&&(dcU(i,2)==dc(k,3))&&
(dcU(i,3)==dc(k,4))&&(dcU(i,4)==dc(k,5))&&(dcU(i,5)==dc(k,6))&&
(dcU(i,6)==dc(k,7)))
{
tU[i] = tU[i] + dc(k,0);
k++;
}
}
return(tU);
}
'
cppFunction(getTsrc)

4)将函数输入转换为矩阵。
  dc1 <- as.matrix(dc)
dcU1 <- as.matrix(dcU)

5)运行函数并对其计时(返回与唯一数据帧匹配的时间向量)
  pt <- proc.time()
t <- getT(dc1, dcU1)
print(proc.time() - pt)

user system elapsed
0.18 0.03 0.20

6)自我高五和更多的咖啡。

最佳答案

您可以使用apply

在这里,我们跨行(apply)在c上使用1,并在每行上使用function(x) all(x == z)函数。

然后,它将拉出行的整数位置。

which(apply(c, 1, function(x) all(x == z)))
b b
3 7

编辑:如果您的实际数据有此问题,并且只有9列(没有太多的键入),则可以尝试使用完全矢量化的解决方案:
which((c[,1]==z[1] & c[,2]==z[2] & c[,3]==z[3] & c[,4]==z[4]& c[,5]==z[5]& c[,6]==z[6]))

关于返回其元素(列)均与引用向量匹配的行的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158713/

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