我正在创建一个文件,用于在模型中运行,其中包含我们多次访问的多个不同站点的物种计数。但是,并不是每次访问都会访问所有站点。
如果未访问过,我需要一列保留所有 NA,但如果该列来自已访问但未检测到物种的地块,则应为 0。以下是我当前格式的数据的迷你样本。所以我本质上需要一种方法将 p1 和 p2 列中的所有 NA 转换为 0,同时保留 p3 以供第二次访问所有 NA。我的真实数据中有数百列,所以我宁愿不必手动分配 NA 是否应转换为 0 或尽可能逐列保留 NA。
## creates example dataframe
library(dplyr)
library(tidyr)
Species<-c("a","b","c","a","d","d","c","a","b","c") # four species
visit<-c(1,1,2,2,1,2,2,1,2,1) #two visits
Site<-c("p1","p1","p1","p1","p2","p2","p2","p3","p2","p2") #three sites
TotalCount<-c(1,3,4,3,5,2,1,3,1,1) $number of individuals captured
df<-data.frame(Species, visit, Site, TotalCount)
df2 <- df %>%
dplyr::select("Species", "Site","TotalCount","visit") %>%
pivot_wider(names_from = Site, values_from = TotalCount,
values_fill = NA)%>%
arrange(visit, Species)
最终的 df2 数据框应如下所示:
Species visit p1 p2 p3
1 a 1 1 0 3
2 b 1 3 0 0
3 c 1 0 1 0
4 d 1 0 5 0
5 a 2 3 0 NA
6 b 2 0 1 NA
7 c 2 4 1 NA
8 d 2 0 2 NA
我相信这可以使用包 hutilscpp 完成任务
给出
一种方法是使用
replace