【发布时间】:2020-01-10 22:50:56
【问题描述】:
我是 R 新手,在使用更高级的过滤时遇到了困难。我有一个包含 1500 行家庭成员的数据框,需要过滤掉至少有 1 人超过 24 岁的家庭成员。例如,在下面的样本集中,我只想保留第 3 行,4 和 5。
PersonalID DOB HouseholdID
1 1961-04-15 123
2 2017-01-12 123
3 2000-01-02 122
4 2001-03-05 122
5 1996-08-22 122
最初,我只是过滤以获得该年龄范围内每个人的新数据框,然后再次过滤原始数据框(一次又一次,依此类推......)与 25 岁以下的人的每个 HouseholdID 以检查是否有人否则 HouseholdID 超过 24 岁。
每当我一遍又一遍地做同样的事情时,似乎可能有一种方法可以使用函数,但我很难想出一个可行的方法。这是我目前的尝试,但我知道它有很多问题:
UNDER25df <- filter(df, DOB >= "yyyy-mm-dd")
for (UNDER25df$HouseholdID in df) {
if (all(df$DOB >= "yyyy-mm-dd")) {
view(filter(df, HouseholdID == "$HouseholdID"))
}
}
我得到的错误是:
“}”中出现意外的“}”
但我很确定我可以在 R 的 for 循环中嵌套一个 if 语句,而且我对括号的位置很小心,所以我不知道它到底指的是什么。
我不确定是否可以以这种方式遍历数据框,或者这是否有意义。我已经读过矢量化对于高级过滤通常可能更好,但尝试阅读有关它的文档并且无法真正了解如何使其跳转到这个问题。有人有我应该研究的建议或方向吗?
【问题讨论】:
-
不知道为什么在这里需要
for循环,而比较中的值没有意义DOB >= "yyyy-mm-dd"或HouseholdID == "$HouseholdID"或循环for (UNDER25df$HouseholdID in df)。可能是df %>% group_by(HouseholdID) %>% filter(all(as.Date(DOB) >= as.Date("2010-01-01")))