R: объединить два файла CSV на основе сопоставления - PullRequest
0 голосов
/ 06 января 2012

У меня есть два CSV-файла:

csv1 <- data.frame(y=c("classA", "classB", "classA", "classB", "classA", "classC"), 
                   DBID=c("d1", "d1", "d2", "d3", "d3", "d3")) 

       y DBID
1 classA   d1
2 classB   d1
3 classA   d2
4 classB   d3
5 classA   d3
6 classC   d3

csv2 <- data.frame(tm=c("t1","t1","t2"), 
                   y=c("classA","classC","classB"))

  tm      y
1 t1 classA
2 t1 classC
3 t2 classB

Я хочу извлечь информацию для получения таблицы, сопоставив столбец y в обоих файлах csv, т.е.

t1 имеет classA и classC в файле csv2, поэтому все DBID, классифицированные как classA в csv1 (d1, d2 и d3), перечислены в результирующем кадре данных с t1 в первом столбце, d1, d2 и d3 в качестве второго колонка

t2 имеет класс B в файле csv2, поэтому все DBID, классифицированные как класс B в csv1 (d1 и d3), перечислены в фрейме данных результата с t2, указанным в первом столбце, d1 и d3 во втором столбце.

и получите кадр данных следующим образом:

tm DBID endcol
t1 d1   1
t1 d2   1
t1 d3   1
t1 d3   1
t2 d1   1
t2 d3   1

Пожалуйста, проинструктируйте, как это сделать с R.

1 Ответ

3 голосов
/ 06 января 2012

Может быть merge?

> merge(csv1,csv2)
       y DBID tm
1 classA   d1 t1
2 classA   d2 t1
3 classA   d3 t1
4 classB   d1 t2
5 classB   d3 t2
6 classC   d3 t1

Вы можете добавить колонку из всех самостоятельно. merge (по умолчанию) объединяет два на основе столбцов с одинаковыми именами, поэтому мне не пришлось передавать никаких других аргументов. Если у вас совпадают другие имена столбцов, вам нужно явно указать аргумент by, чтобы получить желаемое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...