Извлечение элементов из фрейма данных R

#r #dataframe #frame

#r #фрейм данных #фрейм

Вопрос:

У меня есть 2 фрейма данных, и мне нужны только числа, которые находятся в обоих фреймах. Я использую эту функцию:

 CH3[CH2[,2] %in% CH3[,2],]
  

Проблема в том, что фреймы данных имеют разную длину, и эта операция CH2[,2] %in% CH3[,2] выдает 1400 истинных значений. Я некоторое время искал, но не мог найти решение. Если я применю его к CH3 длиной 1700, я также получу все добавляемые данные, которые не помечены как неправильные. Есть ли параметр функции, который я могу использовать, или мне нужен обходной путь?

Правка1:

 CH3<-read.table("unkown1.txt")
CH2<-read.table("unkown2.txt")
  

Теперь мне нужны только те элементы, которые находятся в обеих таблицах. Я использовал:

 CH3[CH3[,2] %in% CH2[,2],]
  

Который работает только в том случае, если CH3 больше

Комментарии:

1. На самом деле речь идет не о длинах фреймов данных. В первом примере вы пытаетесь выполнить индексацию с CH3 использованием вектора, длина CH2 которого равна . Так что это действительно не работает, независимо от размеров фреймов данных. Когда CH3 это дольше, вы получаете неправильные результаты. Когда CH3 короче, вы получаете сообщение об ошибке.

Ответ №1:

merge это вариант, в зависимости от того, что именно вы пытаетесь сделать:

 CH2 <- data.frame(a=letters[1:20], b=1:20)
CH3 <- data.frame(a=letters[15:26], b=15:26)

merge(CH2, CH3, by=2)
  

производит:

    b a.x a.y
1 15   o   o
2 16   p   p
3 17   q   q
4 18   r   r
5 19   s   s
6 20   t   t
  

Другой альтернативой является использование intersect :

 x <- intersect(CH2[, 2], CH3[, 2])
  

Где x :

 [1] 15 16 17 18 19 20
  

Затем вы можете выполнить одно из следующих действий:

 CH2[CH2[, 2] %in% x, ]
CH3[CH3[, 2] %in% x, ]
  

Чтобы получить:

    a  b
15 o 15
16 p 16
17 q 17
18 r 18
19 s 19
20 t 20