#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