Почему `merge ()` создает пустой объект? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть подмножество фрейма данных по видам, используя which():

sp1 <- data[which(data$species=='sp1'),]

В этом кадре данных подмножества имеются данные для 4 сайтов (sp1), и я хотел бы извлечь данные из двух из них и объединить их в новый кадр данных.

Я снова выделил их, используя which():

site.1 <- data.frame(sp1[which(sp1$site=='site1'),]) site.2 <- data.frame(sp1[which(sp1$site=='site2'),])

Однако, когда я использую merge(), чтобы объединить их в новый фрейм данных:

site.1.2 <- merge(site.1,site.2, by = "site")

R создает пустой фрейм данных (с правильными заголовками).

Мои вопросы:

1) Почему merge() не помещает данные из site.1 и site.2 в этот новый фрейм данных?

2) Могу ли я просто поместить данные из site1 и site2 из исходного фрейма вместе? Если так, то как? Я пытался использовать which() с оператором ИЛИ:

site.1.2 <- data.frame(data[which(data$site=='site1'),] | data[which(data$site=='site1'),])

но это не удалось.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Я не уверен, понимаю ли я, что вы действительно хотите получить, но я подозреваю, что вам нужен фрейм данных для видов == sp1 с данными двух сайтов.

Если я прав, вы должны выполнить слияние по видам, а не по участкам, как показано ниже:

site.1.2 <- merge(site.1,site.2, by = "species")

Если нет, и вы хотите объединить по сайту, вы должны сделать:

site.1.2 <- merge(site.1,site.2, by = "site", all=T)

Надеюсь, это поможет.

0 голосов
/ 30 августа 2018

Очень простое решение:

rbind(site.1,site.2)

0 голосов
/ 30 августа 2018

слияние не работает, потому что оно ищет совпадение сайтов в двух наборах данных, вы можете сделать это, выполнив это by = "all other columns" возможно

Самый простой способ сделать то, что вы хотите, будет

site.1.2 <- sp1[sp1$Site %in% c("site1", "site2"), ]

возможно, потребуются некоторые незначительные изменения, не используйте фиктивный набор для проверки как не предоставленный

edit: sp1 $ требуется, так как не data.table

...