r - 如何计算每行中重复值或值的出现次数?
问题描述
我有一个df
包含一堆位置数据的数据框,如下所示:
ID ZIP1 ZIP2 ZIP3 ZIP4
1 98109 01720 98109 94118
2 94118 01720 01718 94109
3 01720 95872 95872 01720
4 01718 94109 94118 01720
5 94109 94109 95872 94109
6 94118 01720 94109 95872
我想返回在多列中具有相同邮政编码的个人数量(即 #1 有 98109 出现两次,但 #2 没有重复代码等),所以正确的值应该是 3 个人。
我试过anyDuplicated(df$ZIP1, df$ZIP2, df$ZIP3, df$ZIP4)
了,但它没有给我正确的价值。
如何获得正确的值,无论是在多个步骤中还是在一次立即计算中?
解决方案
我们可以使用apply
row-wise 并找出是否有any
重复并计算sum
.
sum(apply(df, 1, function(x) any(duplicated(x))))
#[1] 3
或与anyDuplicated
sum(apply(df, 1, anyDuplicated) > 0)
#[1] 3
另一种选择使用tidyverse
library(tidyverse)
df %>%
gather(key, value, -ID) %>%
group_by(ID) %>%
summarise(dupe = any(duplicated(value))) %>%
ungroup() %>%
summarise(final = sum(dupe)) %>%
pull(final)
#[1] 3
或者
df %>%
gather(key, value, -ID) %>%
group_by(ID) %>%
summarise(dupe = anyDuplicated(value)) %>%
ungroup() %>%
summarise(final = sum(dupe > 0)) %>%
pull(final)
#[1] 3
推荐阅读
- makefile - 无法使用介子安装 glib 库
- python-3.x - 具有外生变量和线性时间趋势的 StatsModels SARIMAX
- oracle - Oracle 触发器无法在 if 子句中包含逻辑
- python - 在 pandas 中创建新列引发 AttributeError:(“'str' 对象没有属性 'str'”,'发生在索引 0')
- python - 如何使用 Chromedriver 和 Selenium Python 在 Instagram 登录页面中找到用户名和密码字段
- javascript - 在 JavaScript 中更改数组中的值
- python-3.x - Apache Beam Jupyter Notebook:ImportError:无法从“google.cloud”(未知位置)导入名称“storage”
- android - 重构活动仅在提供的数据上有所不同
- python - googleapi python如何获取/刷新访问令牌
- reactjs - 有没有类似electron-vue 的react 插件?