程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据?

开发过程中遇到根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据的问题如何解决?下面主要结合日常开发的经验,给出你关于根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据的解决方法建议,希望对你解决根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据有所启发或帮助;

我有一个相当大的 data.frame,有几千行和几十列。某些行在最后一列中具有 NA 值。示例 df:

          pos1    pos2    pos3    pos4    pos5    pos6    
case1     0.5     0.6     0.5     0.3     0.2      NA
case2     0.3     0.7     0.2     0.1     0.5      0.5
case3     0.1     0.2     0.6     0.8     NA       NA
case4     0.4     0.1     0.1     0.6     0.3      0.9
  . 
  .
  .

此外,我必须对索引 i1 和 i2 进行向量:

i1:

[1] 2 3 2 1

i2:

[1] 5 4 5 6

我想做的是根据 i1 和 i2 中的索引定义的范围对 data.frame 的每一行进行子集化。说,我想得到一个向量列表或第二个 data.frame,其中每个向量或行是初始 data.frame 的一行,根据 i1:12 过滤,如果输出是一个数据框。

所需的输出是:

向量列表:

[[1]] 
[1] 0.6 0.5 0.3 0.2
[[2]]
[1] 0.2 0.1
[[3]]
[1] 0.2 0.6 0.8 NA
[[4]]
[1] 0.4 0.1 0.1 0.6 0.3 0.9

数据框:

          pos1    pos2    pos3    pos4    pos5    pos6    
case1     NA      0.6     0.5     0.3     0.2      NA
case2     NA      NA      0.2     0.1     NA       NA
case3     NA      0.2     0.6     0.8     NA       NA
case4     0.4     0.1     0.1     0.6     0.3      0.9
  . 
  .
  .

如果我只有一个索引并且只想为每一行获取一个值,我知道我可以使用 seq_along 以以下形式获取值向量:

subset <- df[cbind(seq_along(i1),i1)]

但是我无法获得正确的代码来做一些类似但使用由两个索引分隔的值范围。

请我需要一些帮助。非常感谢。

解决方法

我们可以使用@H_481_5@map

@H_481_5@map(function(x,i,j) x[i:j],asplit(df,1),i1,i2)

-输出

#$case1
#pos2 pos3 pos4 pos5 
# 0.6  0.5  0.3  0.2 

#$case2
#pos3 pos4 
# 0.2  0.1 

#$case3
#pos2 pos3 pos4 pos5 
# 0.2  0.6  0.8   NA 

#$case4
#pos1 pos2 pos3 pos4 pos5 pos6 
# 0.4  0.1  0.1  0.6  0.3  0.9 

对于第二种情况

do.call(rbind,Map(function(x,j) replace(x,!seq_along(X) %in%
          i:j,NA),i2))

-输出

#      pos1 pos2 pos3 pos4 pos5 pos6
#case1   NA  0.6  0.5  0.3  0.2   NA
#case2   NA   NA  0.2  0.1   NA   NA
#case3   NA  0.2  0.6  0.8   NA   NA
#case4  0.4  0.1  0.1  0.6  0.3  0.9

数据

df <- structure(list(pos1 = c(0.5,0.3,0.1,0.4),pos2 = c(0.6,0.7,0.2,0.1),pos3 = c(0.5,0.6,pos4 = c(0.3,0.8,0.6),pos5 = c(0.2,0.5,NA,0.3),pos6 = c(NA,0.9)),class = "data.frame",row.names = c("case1","case2","case3","case4"))

i1 <- c(2,3,2,1)

i2 <- c(5,4,5,6)
@H_262_85@

大佬总结

以上是大佬教程为你收集整理的根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据全部内容,希望文章能够帮你解决根据 R 中的两个索引,为每一行获取 data.frame 中的列范围 数据所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。