我有一个用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的元素是否与标签的一个元素匹配,它可以不在那里,然后提取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
有什么建议吗?
粗略地说我想要知道是否有可能使用匹配的方法,但是对于列,可能会将列标签转换成行?
答案 0 :(得分: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")
使用[[]]
或$
,您可以选择数据框的第一个元素作为向量,然后使用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]