在 R 中使用 min() 查找最年轻的后代
Find youngest offspring using min() in R
我有一个系谱数据集,为了进行一些计算和估计,我需要找到一个人最小的后代的出生年份。我已经尝试了 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))
我有一个系谱数据集,为了进行一些计算和估计,我需要找到一个人最小的后代的出生年份。我已经尝试了 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))