2014-10-06 4 views
0

Я очень новичок в R и заранее извиняюсь, если этот вопрос слишком исправен. Я загрузил две таблицы из онлайн-базы данных и хотел бы идентифицировать общие (и уникальные) записи из двух столбцов. Я хотел бы сравнить столбец «Геном» из таблицы «HPMT» со столбцом «Specie» из таблицы «TS_COG». Мой код ниже:R - Поиск общих записей в столбцах из двух отдельных таблиц

таблицы Импорт и определить столбцы:

HMPT=read.table("HMPtable.csv", header = TRUE, sep = ",", fill=TRUE) 
GL=HMPT$Genome 
TS=read.table("TS_COG.csv", header = TRUE, sep = ",", fill =TRUE) 
SPL=TS$Specie 

Определение общих записей между двумя колоннами:

Same=intersect(GL, SPL) 
Same 

Я прошел по списку, порожденного> То же, и это, как представляется, быть слишком коротким. Я вручную просмотрел два столбца и нашел общие записи, которые не включены в> Same. Должно быть что-то не так с моим форматированием или импортом таблиц. Заранее спасибо.

PS

+1

Насколько чисты ваши данные? Я бы рекомендовал (1) установить 'stringsAsFactors = FALSE' в ваших' read.table() 'вызовах, чтобы убедиться, что все импортировано как есть, и (2) установить' strip.white = T', чтобы избавиться от любых дополнительное пустое пространство (также как аргумент в 'read.table'. – Gregor

+0

Благодарим вас за предложения. Данные довольно чистые, я думаю. Можете ли вы уточнить? Я также попытался импортировать столбец медведя вместо всего столбца и Мне кажется, что список длинный: одна таблица имеет 400 rwos по сравнению с одной с 10 000 строк. –

+1

@Peter Spanos Не могли бы вы попробовать его на меньшем подмножестве и посмотреть, не исчезнет ли проблема? Также, в этом случае , вы можете показать небольшой воспроизводимый пример, используя 'dput'. – akrun

ответ

2

Одним из возможных вариантов для указанной проблемы в этой должности будет:

GL <- c("A1", "A2 ", " A3") 
TS <- c(" A1", "A2 ", "A3", "A4", "A5 ") 

intersect(GL,TS) 
#[1] "A2 " 

Вы можете исправить это, либо с помощью str_trim удалить ведущие/отстающие пространства.

library(stringr) 
intersect(str_trim(GL), str_trim(TS)) 
#[1] "A1" "A2" "A3" 

или использовать gsub

GL1 <- gsub("^ +| +$", "", GL) 
TS1 <- gsub("^ +| +$", "", TS) 
intersect(GL1, TS1) 
#[1] "A1" "A2" "A3" 
+0

Спасибо за ваше предложение, однако это не решило проблему. См. Комментарий выше. –

0

Назначают одинаковые имена для конкретных столбцов как в кадре данных

HMPT$name <- HMPT$Genome TS$name <- TS$Specie

Это перечислит все общие элементы в обоих колонны

common <- merge(HMPT, TS, by="name") 
Смежные вопросы