【发布时间】:2021-03-01 10:58:27
【问题描述】:
所以,我有一个庞大的谱系,由个人、父母、出生年份和个人后代的平均出生年份组成。 举个例子来说明一下:对于个体 5,出生年份是 1900。这是不可能的,因为它的父母出生于 1975 年和 1977 年。个体 5 也有出生年份的后代。 “修复”缺失或错误的出生年份数据的常用方法是从后代的平均出生年份中减去世代间隔。因此,对于个人 5,后代的平均出生年份是 1983 年,因此 1983 - 5 = 1978。我尝试使用 IF 函数对其进行编码,但由于出现两个错误(粘贴在下面),它不起作用。 case_when 和 mutate 会更好吗?
Indiv <- c(1:10)
Mother <- c(NA, NA, NA, 2, 3, 3, 6, 3, 8, 8)
Father <- c(NA, NA, NA, 1, 1, 1, 5, 4, 4, 9)
YOB <- c(1975, 1975, 1977, 1980, 1900, 1982, 1983, NA, 1988, 1993)
AvgYOBOff <- c(1954, 1981, 1943, 1988, 1983, 1983, NA, 1990.5, 1993, NA)
df <- data.frame(Indiv, Mother, Father, YOB, AvgYOBOff)
L = 5 #generation interval of 5 years
if(df$YOB < df$YOB[match(df$Mother, df$Indiv)] & df$YOB[match(df$Father, df$Indiv)]){
mutate(df, YOB = AvgYOBOff - L)
}
Error in if (df$YOB < df$YOB[match(df$Mother, df$Indiv)] & df$YOB[match(df$Father, :
missing value where TRUE/FALSE needed
In addition: Warning message:
In if (df$YOB < df$YOB[match(df$Mother, df$Indiv)] & df$YOB[match(df$Father, :
the condition has length > 1 and only the first element will be used
【问题讨论】:
-
您正在检查向量的条件,但要改变数据帧?如果你的条件不成立怎么办?
-
对于个人 1,
AvgYOBOff是 1954,但YOB是 1975 - 这是正确的吗? -
这与您之前的问题有何不同?
-
@AnilGoyal 如果条件为假,则 YOB 不应更改。我不一定要改变数据框,我只希望 YOB(在数据框中)改变如果后代的生日发生在其父母之前
标签: r dataframe if-statement