Р: Как отключить частичное распознавание образов при выборе строк фрейма данных по вектору требуемых имен строк? - PullRequest
0 голосов
/ 06 марта 2020

Я видел неожиданные результаты при выборе строк фрейма данных с использованием вектора требуемых имен строк. Я понял, что это потому, что R разрешает частичное распознавание образов между именами строк фрейма данных и строками в моем векторе. После вопроса здесь .. R, возвращающего частичное совпадение имен строк .. это, кажется, когда строка содержит символы, за которыми следуют цифры? Ответы на приведенный выше вопрос относятся к критериям одной строки, но не объясняют, как обращаться с поиском строк как вектором.

Например, если у меня есть фрейм данных (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

Как мне обойти это частичное распознавание образов, сохраняя выходные данные в том же порядке, что и вектор поиска, с вектором поиска ~ 10000 элементов, избегая циклов и с любыми элементами в векторе, отсутствующими в именах строк (df), замененными на NA?

(запускается с версией version.string версии 3.6.1 (2019-07-05))

...