Exploring genealogy with R: readgedcom and tidygraph

My code is an absolute mess right now, but here’s a fun plot showing everyone in my family GEDCOM. With so many people, it’s hard to visualize all of them at once, and most software provides one or the other of a descendant tree or an ancestor tree.

Colors on this plot show whether a person is a terminal ancestor (no parents) or terminal descendant (no children). You can also tell that I don’t have the graph (connections between people) set up properly, because I don’t have that many unrelated individuals in this GEDCOM (at least, I shouldn’t). Overall I think this is a good start and eventually I can end up with a poster.

network plot with lots of circles and arrows
Red = terminal ancestor, green = terminal descendant, blue = neither.

Hack Grand Forks – 311

I’ve been thinking about this for a while, and finally took a few evenings to do it. I built a Mastodon bot that toots each Grand Forks 311 request: https://botsin.space/@hackgfk_311. It also crossposts at https://twitter.com/hackgfk_311.

The code can be found at https://github.com/mattbk/hack-grand-forks. Yes, I built it in R.

Mastodon toots from @hackgfk_311@botsin.space.

Why “hack”? In the sense that this is information that should be more available to people, and I’m making it more available without going to a separate location. Perhaps something good can come of it.

sum() with raster::aggregate() in R

If you try to use sum() directly in raster::aggregate() and have NA values, you’ll get NA as a result. You need to build a tiny function and pass the rm.na=T command to sum(). More succintly:

# Dissolve duplicate geometries and sum OOIP
 fm <- raster::aggregate(fm.raw,
                         by="OilFieldID", 
                         sums=list(list(function(x) sum(x,na.rm=T),
                                        "OOIP_pooltable")))

 

Comparing two lists with R

No, not list() lists.

a <- data.frame(name=old$NAME)
a$status <- "old"
b <- data.frame(name=allfields[allfields$StateAbbre=="ND",]$name)
b$status <- "new"

both<-merge(a,b,by="name",all=T)

Make two data frames, one for each list, create a column identifying each one (new or old), then join on the common column (name).

Output:

Example output from comparing to lists in R using a merge().
Example output from comparing to lists in R using a merge().

See also: http://stackoverflow.com/questions/17598134/compare-two-lists-in-r/17599048#17599048