簡體   English   中英

在R中沒有循環地查找值

[英]finding values without a loop in R

我有一個用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列的相應元素,然后提取column的元素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     

有什么建議嗎?

粗略地講,我想知道是否可以使用匹配項,但是對於列,也許可以在一行中轉換列標簽?

只需創建一些測試數據來說明我的解決方案:

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")

使用[[]]$ ,可以選擇數據幀的第一個元素作為向量,然后使用which%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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM