r - Determine which values are absent from a given column thus have a 0 count -


i trying determine species have count of 0 (no value n) unique site.

for example, species5 through species33 not present in site1.d1. species2 through species33 not present in site1.d2, species1 through species4 & species6 through species33 not present in site1.d3, , forth.

there 33 total species (species1 species33), there 4 different sets of sites (site1 site4), ranging d1 d45 (for example, site1.d1 site1.d45 & site2.d1 site2.d35, etc.).

i want add missing species n of 0 existing data.table named testit.

# species       site    n # species1  site1.d1    17 # species2  site1.d1    1 # species3  site1.d1    4 # species4  site1.d1    1 # species1  site1.d2    14 # species5  site1.d3    1 # species6  site2.d2    1 # species6  site2.d4    12 # species7  site3.d3    9 # species6  site3.d5    1   testit <- structure(list(species = structure(c(1l, 2l, 3l, 4l, 1l, 5l, 6l, 6l, 7l, 6l), .label = c("species1", "species2", "species3", "species4", "species5", "species6", "species7"), class = "factor"),     site = structure(c(1l, 1l, 1l, 1l, 2l, 3l, 4l, 5l, 6l, 7l     ), .label = c("site1.d1", "site1.d2", "site1.d3", "site2.d2",     "site2.d4", "site3.d3", "site3.d5"), class = "factor"), n = c(17l,     1l, 4l, 1l, 14l, 1l, 1l, 12l, 9l, 1l)), .names = c("species", "site", "n"), class = "data.frame", row.names = c(na, -10l))   species <- sprintf("species%d", 1:33)  fullsites1 <- sprintf("site1.d%d", 1:45)  fullsites2 <- sprintf("site2.d%d", 1:35)  fullsites3 <- sprintf("site3.d%d", 1:40)  fullsites4 <- sprintf("site4.d%d", 1:42)  fullsites <- c(fullsites1, fullsites2, fullsites3, fullsites4) 

this have tried far:

testit[, which(species %chin% testit$species) == false, = list(species, site)] 

this not me i'm looking for.

what suggestions have?

thank you.

try out using tidyr

library(tidyr)  xx <- testit %>%          spread(site,n) %>%          gather(sites,n,site1.d1:site3.d5)  xx$n[is.na(xx$n)] <- 0 

first step: spread give combinations

testit %>% spread(site,n)     species site1.d1 site1.d2 site1.d3 site2.d2 site2.d4 site3.d3 site3.d5 1 species1       17       14       na       na       na       na       na 2 species2        1       na       na       na       na       na       na 3 species3        4       na       na       na       na       na       na 4 species4        1       na       na       na       na       na       na 5 species5       na       na        1       na       na       na       na 6 species6       na       na       na        1       12       na        1 7 species7       na       na       na       na       na        9       na 

second step: gather data in long form again, , replace na zeros.

    species    sites  n 1  species1 site1.d1 17 2  species2 site1.d1  1 3  species3 site1.d1  4 4  species4 site1.d1  1 5  species5 site1.d1  0 6  species6 site1.d1  0 7  species7 site1.d1  0 8  species1 site1.d2 14 9  species2 site1.d2  0 10 species3 site1.d2  0 11 species4 site1.d2  0 12 species5 site1.d2  0 13 species6 site1.d2  0 14 species7 site1.d2  0 ........ 

Comments

Popular posts from this blog

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

jsf - "PropertyNotWritableException: Illegal Syntax for Set Operation" error when setting value in bean -

laravel - Undefined property: Illuminate\Pagination\LengthAwarePaginator::$id (View: F:\project\resources\views\admin\carousels\index.blade.php) -