【发布时间】:2016-05-25 02:49:29
【问题描述】:
我有一些重复记录的数据,其中一些不应该存在(mark 和 recov 应该每个 band 只出现一次,recap 可以出现多次)。我想根据列 (variable=="mark") 中的某些值选择唯一的观察值 (band),并保留来自 "recap" 和 "recov" 的其余数据。
我使用dyplr,将我的数据按波段分组,然后在variable=="mark"列时选择唯一记录,这是我的代码:
uniq <- df %>%group_by(band) %>% distinct(variable=="mark")
我发现它运行不佳,在查找某些观察结果时,variable=="recap" 中的另一个值已被删除(例如:在band=113749924 中,缺少 1993 年的回顾值,band=113728509 中的情况相同是否缺少概括值)
这是一个数据示例:
structure(list(band = c(113728501L, 113728502L, 113728503L, 113728504L,
113728505L, 113728505L, 113728506L, 113728506L, 113728507L, 113728508L,
113728509L, 113728509L, 113728509L, 113728509L, 113728510L, 113728510L,
113729709L, 113729709L, 113729709L, 113729710L, 113729711L, 113729712L,
113729713L, 113729714L, 113729715L, 113729716L, 113729717L, 113729718L,
113729719L, 113729720L, 113729720L, 113729721L, 113729722L, 113729723L,
113729724L, 113729725L, 113729726L, 113729727L, 113729728L, 113729729L,
113729730L, 113729731L, 113729732L, 113729733L, 113729733L, 113729733L,
113729734L, 113729735L, 113729735L, 113729735L, 113729914L, 113729914L,
113729914L, 113729914L, 113729915L, 113729916L, 113729917L, 113729918L,
113729919L, 113729920L, 113729921L, 113729922L, 113729923L, 113729924L,
113729925L, 113729926L, 113729927L, 113729928L, 113729929L, 113749923L,
113749924L, 113749924L, 113749924L), variable = structure(c(1L,
1L, 1L, 1L, 1L, 3L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 1L,
3L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 1L, 3L,
2L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 3L, 2L), .Label = c("mark", "recap",
"recov"), class = "factor"), year = c(1994L, 1994L, 1994L, 1994L,
1994L, 2012L, 1994L, 1999L, 1994L, 1994L, 1994L, 1994L, 2002L,
2003L, 1994L, 1996L, 1994L, 2002L, 1998L, 1994L, 1994L, 1994L,
1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1995L,
1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L,
1994L, 1994L, 1994L, 1994L, 2002L, 2001L, 1994L, 1994L, 1999L,
1998L, 1994L, 1994L, 1999L, 2005L, 1994L, 1994L, 1994L, 1994L,
1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L, 1994L,
1994L, 1994L, 1991L, 1991L, 1994L, 1993L)), .Names = c("band",
"variable", "year"), class = "data.frame", row.names = c(NA,
-73L))
最后我想要类似的东西(例如 113749924):
band year variable
113749924 1991 mark
113749924 1993 recap
113749924 1994 recov
您能帮我找出问题所在,或者建议我一个替代代码吗?
非常感谢!
【问题讨论】:
-
将数据内联发布为
dput的输出是获得帮助的最佳方式。外部链接没有用。 -
非常感谢您的建议!我今天学到了新东西
-
你可以试试
distinct(df)。或者,如果您使用group_by,您可以使用slice来获取第一行重复集。 -
那是你想要的三行输出吗?根据显示的数据,
mark在band113749924 中没有任何重复项。 -
第二种解决方案有效!!!太感谢了!! @akrun
标签: r duplicates unique dplyr