Я видел неожиданные результаты при выборе строк фрейма данных с использованием вектора требуемых имен строк. Я понял, что это потому, что 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))