我正在尝试使用家庭信息过滤data.frame。看起来像这样:
+--------+-------+---------+
| name | dad | mom |
+--------+-------+---------+
| john | bert | ernie |
| quincy | adam | eve |
| anna | david | goliath |
| daniel | bert | ernie |
| sandra | adam | linda |
+--------+-------+---------+
现在我想知道是否每个人都有相同的父亲,也有相同的妈妈。我已经花了一个小时尝试各种方法,但是我一直陷于困境。另外,我想使用R方法,而不要使用冗长的函数或for循环序列来在技术上满足我的需要,而无需学习任何新知识。
我的预期输出:
+--------+------+-------+
| name | dad | mom |
+--------+------+-------+
| quincy | adam | eve |
| sandra | adam | linda |
+--------+------+-------+
基本上,我希望有一个data.frame,其中包含有来自多个合作伙伴的孩子的爸爸妈妈。
到目前为止,我的方法是:
到目前为止我的代码:
fraternals <- split(kinship, kinship$father)
fraternals <- fraternals[-which(lapply(fraternals, function(x) if(nrow(x) == 1) { output TRUE }))]
但这不会运行,因为r表示我不能以这种方式使用TRUE。
答案 0 :(得分:3)
一种dplyr
可能是:
df %>%
group_by(dad) %>%
filter(n_distinct(mom) != 1)
name dad mom
<chr> <chr> <chr>
1 quincy adam eve
2 sandra adam linda
如果您不想过滤但想查看此信息:
df %>%
group_by(dad) %>%
mutate(cond = n_distinct(mom) != 1)
name dad mom cond
<chr> <chr> <chr> <lgl>
1 john bert ernie FALSE
2 quincy adam eve TRUE
3 anna david goliath FALSE
4 daniel bert ernie FALSE
5 sandra adam linda TRUE
答案 1 :(得分:1)
这里是使用data.table
library(data.table)
setDT(df)[, .SD[uniqueN(mom) != 1], .(dad)]