Определите, для какого идентификатора выполняются все условия в R - PullRequest
0 голосов
/ 14 марта 2019

Я думаю, это должно быть относительно просто. Я использую последнюю версию R. В кадре данных у меня есть столбец с идентификационными номерами с именем PairID и столбец с видами с 15 различными видами. Я хочу знать, какие номера PairID имеют все 15 видов.

Фрейм данных выглядит примерно так:

head(analysis.df)
species     PairID
DIKDIK        1
GAZELLE       2
GIRAFFE       1
ELAND         5
GIRAFFE       3
DIKDIK        2

Моя идея состояла в том, чтобы запустить это:

    for(i in 1:nrow(analysis.df)) {
  if (analysis.df$species[i]=="GRANTS GAZELLE") {analysis.df$GRANTS GAZELLE[i] <- 1}
  else if (analysis.df$species[i]=="DIKDIK") {analysis.df$DIKDIK[i] <- 1 
  else if (analysis.df$species[i]=="IMPALA") {analysis.df$IMPALA[i] <- 1}
  else if (analysis.df$species[i]=="BUFFALO") {analysis.df$BUFFALO[i] <- 1}
  else if (analysis.df$species[i]=="BUSHBUCK") {analysis.df$BUSHBUCK[i] <- 1}
  else if (analysis.df$species[i]=="GIRAFFE") {analysis.df$GIRAFFE[i] <- 1}
  else if (analysis.df$species[i]=="ELAND") {analysis.df$ELAND[i] <- 1}
  else if (analysis.df$species[i]=="GERENUK") {analysis.df$GERENUK[i] <- 1}
  else if (analysis.df$species[i]=="LESSER KUDU") {analysis.df$LESSER KUDU[i] <- 1}
  else if (analysis.df$species[i]=="HARTEBEEST") {analysis.df$HARTEBEEST[i] <- 1}
  else if (analysis.df$species[i]=="STEENBOK") {analysis.df$STEENBOK[i] <- 1}
  else if (analysis.df$species[i]=="ORYX") {analysis.df$ORYX[i] <- 1}
  else if (analysis.df$species[i]=="REEDBUCK") {analysis.df$REEDBUCK[i] <- 1}
  else if (analysis.df$species[i]=="THOMSONS GAZELLE") {analysis.df$THOMSONS GAZELLE[i] <- 1}
  else if (analysis.df$species[i]=="WATERBUCK") {analysis.df$WATERBUCK[i] <- 1}

}

Тогда я мог бы попробовать summary для всех строк с 1 во всех этих вновь созданных столбцах.

Но этот код выдает ошибку:

> Error: unexpected symbol in:
"for(i in 1:nrow(analysis.df)){
  if (analysis.df$species[i]=="GRANTS GAZELLE") {analysis.df$GRANTS GAZELLE"

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

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Похоже, что вы хотите сделать, это group ваши данные by ID и затем summarize члены видов, основанные на условии.Поскольку вы не предоставите воспроизводимый пример, я буду использовать mtcars.Здесь мы группируем по количеству передач, а затем проверяем, содержит ли столбец carb all предоставленные значения (1, 2, 3 и 4):

library(dplyr)
mtcars %>%
    group_by(gear) %>%
    summarize(all_carb = all(c(1,2,3,4) %in% carb))

# A tibble: 3 x 2
   gear all_carb
  <dbl> <lgl>   
1     3 TRUE    
2     4 FALSE   
3     5 FALSE   

В вашем случае вы 'd сделать что-то вроде:

analysis.df %>%
    group_by(ID) %>%
    summarize(all_species = all(species_list %in% species))

при условии, что species_list - это вектор, содержащий значения видов, которые вы хотите проверить на

0 голосов
/ 14 марта 2019

Попробуйте:

dplyr::filter(analysis.df, nrow(analysis.df$PairID) > 14)

Обязательно установите пакет dplyr, если он еще не установлен и не загружен.

В коде, который вы написали, вам нужно будет включить обратные метки для любого имени столбца, в котором есть пробел в середине: "dataframe$`Column with a space`" (без кавычек)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...