Есть ли в R функция, которая позволит мне создать новый фрейм данных, содержащий дублированные значения из первого фрейма данных? - PullRequest
0 голосов
/ 10 апреля 2020

Это мой пример. Из этого фрейма данных я хочу создать новый фрейм данных, который содержит строки, основанные на совпадениях в столбцах, mgb и column, tsg, тем самым пропуская другие строки.

mbr  mbg tsr tsg
1   1   g1   3  g4
2   2   g2   4  g3
3   3   g3   5  g2
4   4   g4   6  g1
5   5   g5   7  g5
6  NA <NA>   1  g6
7  NA <NA>   2  g7

Так что в идеале он должен вернуть этот фрейм данных:

mbr  mbg tsr tsg
1   1   g1   3  g4
2   2   g2   4  g3
3   3   g3   5  g2
4   4   g4   6  g1
5   5   g5   7  g5

Пока я пробовал:

1) intersect(df$mbg,df$tsg), но это возвращает только списки совпадений между столбцами, например, g1, g2 et c ...

2) df2<-[intersect(df$mbg,df$tsg),]

, который возвращает это:

     mbr  mbg tsr  tsg
NA    NA <NA>  NA <NA>
NA.1  NA <NA>  NA <NA>
NA.2  NA <NA>  NA <NA>
NA.3  NA <NA>  NA <NA>
NA.4  NA <NA>  NA <NA>

I ' Я очень плохо знаком с R и пытаюсь научить себя, поэтому любой совет будет удивительным. Спасибо!

Ответы [ 4 ]

2 голосов
/ 10 апреля 2020

Вам даже не нужен кусок intersect.

df2 <- df1[df1$mbg %in% df1$tsg, ]

Оператор %in% вернет вектор TRUE / FALSE относительно того, найден ли каждый элемент в mbg (или пересекается) со значениями в tsg

В качестве альтернативы можно использовать библиотеку dplyr (которую, если вы новичок в R, я бы порекомендовал изучить)

library(dplyr)

df2 <- filter(df1, mbg %in% tsg) 
0 голосов
/ 10 апреля 2020
library(dplyr)

df %>% 
  semi_join(df, c('mbg' = 'tsg'))

#   mbr mbg tsr tsg
# 1   1  g1   3  g4
# 2   2  g2   4  g3
# 3   3  g3   5  g2
# 4   4  g4   6  g1
# 5   5  g5   7  g5
0 голосов
/ 10 апреля 2020

Предполагая, что я правильно интерпретирую то, что вы ищете, вы, кажется, на правильном пути, просто сталкиваясь с проблемами с синтаксисом. Попробуйте это

df2<-df[df$mbg %in% intersect(df$mbg,df$tsg),]

intersect(df$mbg, df$tsg) возвращал значения, которые встречаются в обоих из этих столбцов. Добавление df перед скобками идентифицирует фрейм данных, для которого вы хотите получить подмножество, которое ранее отсутствовало, а часть df$mbg %in% говорит, что вы хотите, чтобы строки, в которые включено значение mbg, были включены в пересечение.

0 голосов
/ 10 апреля 2020

Если вы просто хотите удалить NA и записать в новый фрейм данных:

complete.df <- na.omit(df) 
...