确定R中满足所有条件的ID

时间:2019-03-13 22:02:16

标签: r loops if-statement

我认为这应该相对简单。我正在使用R的最新版本。在一个数据框中,我有一列具有ID号的对(称为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}

}

然后我可以尝试对所有这些新创建的列中所有具有1的行进行summary

但是此代码给出了错误:

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

我已经查看了herehere以及R和google搜索中的一些小插曲,但到目前为止还无法破解。我什至不确定这种方法是否能满足我的需求,并乐于考虑实现本文开头所述目标的任何建议。

2 个答案:

答案 0 :(得分:1)

听起来您想要做的是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   

就您而言,您将执行以下操作:

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

假设species_list是一个向量,其中包含您要检查的物种的值

答案 1 :(得分:0)

尝试一下:

{
  "US-TX": 1,
  "US-CA": 2
}

请确保安装dplyr::filter(analysis.df, nrow(analysis.df$PairID) > 14) 软件包(如果尚未安装和加载)。

在您编写的代码中,对于任何在中间带有空格的列名,都需要包括反引号:dplyr(不包括引号)