我认为这应该相对简单。我正在使用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"
我已经查看了here和here以及R和google搜索中的一些小插曲,但到目前为止还无法破解。我什至不确定这种方法是否能满足我的需求,并乐于考虑实现本文开头所述目标的任何建议。
答案 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
(不包括引号)