0

我有一个用 c() 创建的向量 v,它包含以下数据:

 v[a,b,d,z,e,f], it must be unordered

我有一个格式为 txt 的文件:

     label      1            2          3       ....
      b        100        2000          15
      z        123          14          12
      a         55         565          55
     .....

我已经提取了 txt 文件,该文件由带有 strplit 的制表符分隔

      ext_data<-strsplit(file,"\t") 

我要做的是看向量V的元素是否与label的元素之一匹配,它可以像不一样,然后提取txt文件的第1列的相应元素,然后列的元素2 以此类推

我已经使用for循环进行了匹配,但是花费了太多时间,因为txt文件包含太多数据,就像这样(算法上)

      for i=1 to length(v)
             for pos=2 to ext_data      #I put pos=2 because I start in the second row
                  if match(vector) and ext_data(pos,1)  
                       retrieve data from column C     

有什么建议吗?

粗略地说,我想知道是否有办法使用匹配,但是对于列,可能会连续转换列标签?

4

1 回答 1

1

只是创建一些测试数据来说明我的解决方案:

testdata <- data.frame(namecol=c("b","r","a","j","z","l","s","n","t"),
                       v1=sample(1:1000,9),
                       v2=sample(1:1000,9),
                       v3=sample(1:1000,9))
vecfind <- c("a","b","d","z","e","f")

使用[[]]or $,您可以选择数据框的第一个元素作为向量,然后使用whichand%in%函数,您可以获得数字行索引,然后提取元素,如下所示:

v1_elements <- testdata[which(testdata[[1]] %in% vecfind),2]
v2_elements <- testdata[which(testdata[[1]] %in% vecfind),3]
v3_elements <- testdata[which(testdata[[1]] %in% vecfind),4]
于 2012-10-08T13:22:43.630 回答