【发布时间】:2021-04-06 11:00:50
【问题描述】:
我有一个 data.frame (df1),我想为另一个 data.frame (df2) 中的每个样本包含一个最近的年龄:
df1$age <- df2$age_9[match(df1$Sample_ID, df2$Sample_ID)]
问题是df2中有9列年龄,每列表示特定检查日期的年龄(age_1是第一次就诊的年龄,age_9是第9次就诊的年龄)并且患者不做他们的所有访问。
如何从非空检查日期添加最近获得的年龄?
又名,如果 age_9 == "."代替 ”。”与 age_8 那么如果 age_8 == "."代替 ”。”与age_7 ...等
从这里:
View(df1)
Sample Age
1 50
2 .
3 .
收件人:
View(df1)
Sample Age
1 50
2 49
3 30
来自数据 df2
View(df2)
Sample Age_1 Age_2 Age_3
1 40 42 44
2 35 49 .
3 30 . .
这是我的尝试:
df1$age[which(df1$age == ".")] <- df2$age_8[match(df1$Sample_ID, df2$Sample_ID)]
【问题讨论】:
-
您应该
stack更新您的年龄数据集,以便获得长格式。然后您就可以使用ifelse或者您选择的任何其他功能 -
我不清楚格式。可能是
nm1 <- grep("age_\\d+", names(df2), value = TRUE); df1[nm1] <- lapply(df2[nm1], function(x) x[match(df1$Sample_ID, df2$Sample_ID)]) -
@akrun 以便将 df2 的每个年龄列放入 df1 但我只想要最近年龄的一列。我稍微更新了问题以澄清
-
@SkyScraper 你试过cmets里的代码吗
-
@akrun 是的,您的代码刚刚将包含年龄信息的所有列从 df2 添加到 df1。 Onyambu 代码我无法按预期工作,但我可以再试一次