R:当通过所需行名称的向量选择数据帧行时,如何关闭部分模式识别?

问题描述 投票:0回答:1

当使用所需行名称的向量选择数据帧的行时,我一直看到意外的结果。我意识到这是因为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)一起运行]

r dataframe row pattern-recognition
1个回答
0
投票

我尝试过这个

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

将其转换为字符将关闭部分匹配。

© www.soinside.com 2019 - 2024. All rights reserved.