2013-04-04 2 views
0

У меня есть два кадра данных с геномными данными, и мне нужно удалить все строки в кадре данных 1, чья запись в столбце «feature» равна записи в колонке «функция» в строке кадра данных 2.Удалить строки из фрейма данных, чья запись столбца совпадает с таковой из другого фрейма данных

df1 <- data.frame(feature=c("ENSG419","ENSG1617","ENSG1629","ENSG16230"),distance=c(9833,2460,50538,51162),origin=c("e2","e2","e2","e2")) 
df2 <- data.frame(feature=c("ENSG4939","ENSG1617","ENSG5844","ENSG10292"),distance=c(8441,8970,10320,139),origin=c("etoh","etoh","etoh","etoh")) 

> df1 
    feature distance origin 
1 ENSG419  9833  e2 
2 ENSG1617  2460  e2 
3 ENSG1629 50538  e2 
4 ENSG16230 51162  e2 
> df2 
    feature distance origin 
1 ENSG4939  8441 etoh 
2 ENSG1617  8970 etoh 
3 ENSG5844 10320 etoh 
4 ENSG10292  139 etoh 

Я хотел бы получить это:

feature distance origin 
1 ENSG419  9833  e2 
2 ENSG1629 50538  e2 
3 ENSG16230 51162  e2 

Я пытался удалить повторяющиеся записи путем связывания двух кадров данных, к новый кадр данных и последующее извлечение строк с идентичными функциями новых данных fr AME. Теперь я хочу, чтобы удалить указанные строки из исходного кадра данных 1.

df_new <- rbind(df1,df2) 
df_new[duplicated(df_new[,1]),] 

Он не сделал достаточно работы, и я уверен, что есть лучшее решение, в любом случае. Я был бы очень благодарен за любые предложения!

ответ

3

Попробуйте это:

df1[!df1$feature %in% df2$feature, ] 
+0

Спасибо, это работает! – atreju

2

Я бы извлек функции из обоих, сделайте разницу в наборах, а затем подмножество первого кадра данных на основе результатов.

only1 <- setdiff(df1$feature, df2$feature) 
df_sel <- df1[df1$feature %in% only1] 

Но я согласен, что решение Arun является Oneliner :)

Смежные вопросы