当使用所需行名称的向量选择数据帧的行时,我一直看到意外的结果。我意识到这是因为R允许在数据帧行名称和向量中的字符串之间进行部分模式识别。在这里的问题之后..R returning partial matching of row names..这似乎是当字符串包含字符后跟数字吗?上述问题的答案仅针对单行条件,但未解释如何将行搜索作为向量处理。
例如,如果我有数据框(df):
df<-data.frame(matrix(c(0.5,0.4,0.6,rep(0,3)), ncol=2, nrow=3))
colnames(df)<-c("pdx","primary")
rownames(df)<-c("chr6_LINC00680-GUSBP4","chr6_MIR5689HG","chr1_SPRR2")
> df
pdx primary
chr6_LINC00680-GUSBP4 0.5 0
chr6_MIR5689HG 0.4 0
chr1_SPRR2 0.6 0
和搜索向量(test_vector):
test_vector<-c("chr6_MIR5689","chr6_LINC00680","chr1_SPRR2")
> test_vector
[1] "chr6_MIR5689" "chr6_LINC00680" "chr1_SPRR2"
如果我搜索与搜索向量中的行匹配的“ pdx”列的值,则会得到:
> df[test_vector,"pdx"]
[1] 0.4 0.5 0.6
或者按所有列,我得到:
> df[test_vector,]
pdx primary
chr6_MIR5689HG 0.4 0
chr6_LINC00680-GUSBP4 0.5 0
chr1_SPRR2 0.6 0
如果行名中存在完全匹配,则不会发生:
df2<-data.frame(matrix(c(0.6,10,20,0.5,0.4,rep(0,5)), ncol=2, nrow=))
colnames(df2)<-c("pdx","primary")
rownames(df2)<-c("chr1_SPRR2C","chr6_LINC00680","chr6_MIR5689","chr6_LINC00680-GUSBP4","chr6_MIR5689HG")
> df2
pdx primary
chr1_SPRR2C 0.6 0
chr6_LINC00680 10.0 0
chr6_MIR5689 20.0 0
chr6_LINC00680-GUSBP4 0.5 0
chr6_MIR5689HG 0.4 0
> df2[test_vector,]
pdx primary
chr6_MIR5689 20.0 0
chr6_LINC00680 10.0 0
chr1_SPRR2C 0.6 0
我正在使用df [row-vector,column]匹配从数据帧中提取值,其中并非我要搜索的所有行名都出现在数据帧中。我需要将此信息保留为NA,且匹配项/ NA的顺序与初始搜索向量相同。
所以理想情况下,我会得到:
> df[test_vector,"pdx"]
[1] NA NA 0.6
我如何解决这种部分模式识别,同时保持输出与搜索向量相同的顺序,使用〜10,000个元素的搜索向量,避免循环,并且向量中的任何元素都不出现在行名(df)中替换为NA?
(正在与version.string R版本3.6.1(2019-07-05)一起运行]
我尝试过这个
df2<-data.frame(matrix(c(0.6,10,20,0.5,0.4,rep(0,5)), ncol=2, nrow=))
colnames(df2)<-c(as.character("pdx"),"primary")
rownames(df2)<-c("chr1_SPRR2C","chr6_LINC00680","chr6_MIR5689","chr6_LINC00680-GUSBP4","chr6_MIR5689HG")
test_vector<-c("chr6_MIR5111","chr6_LINC00680","chr1_SPRR2")
df2 %>%
transform(pdx = as.character(pdx))
df2[test_vector,"pdx"]
将其转换为字符将关闭部分匹配。