使用R中的min()查找最年幼的后代



我有一个谱系数据集,为了进行一些计算和估计,我需要找到一个个体最年轻后代的出生年份。我尝试过min((函数,我认为它与match((一起起着重要作用,可以将父ID与个人ID进行匹配,但这只会给我NA作为答案。你知道我该怎么解决这个问题吗?

id <- 1:30
momid <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 1,2,1,2,6,8,6,10,11,13,23,19,16,13,16,20,19,16,19,20,23)
dadid <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, 3,4,5,5,7,4,9,7,7,14,24,7,15,18,18,17,21,14,18,21,17)
birthyear <- c(1975, 1975, 1976, 1977, 1977, 1977, 1977, 1978, 1978, 1980, 1981, 1982, 1982, 1984, 1984, 1985, 1985, 1979, 1988, 1989, 1990, 1990, 1991, 1992, 1993, 1993, 1993, 1995, 1995, 1996)
df <- data.frame(id, momid, dadid, birthyear)
min(df$birthyear[match(df$id, df$momid)])
[1] NA
with(df, min(birthyear[match(momid, id)]))
[1] NA

尝试启用na.rm = TRUE

> min(df$birthyear[match(df$id, df$momid)],na.rm = TRUE)
[1] 1979

这是@GKi的答案,所以不是我自己的答案。但GKi将其作为评论发布,所以我将其转发作为结束问题的答案。

df$firstoffspring <- sapply(df$id, function(i) min(df$birthyear[df$momid == i | df$dadid==i], na.rm=TRUE))

最新更新