r - R - 每组一起计算两列中的唯一/不同值
问题描述
R - 一起计算两列中的唯一/不同值
大家好。我有一个选举行为小组,但我在计算一个新变量时遇到了问题,该变量将捕获我的两列Party
和Party2013
每组的唯一值(政党)。该列Party2013
衡量了 2013 年选举中的投票并Party
衡量了 2013 年之后的选民意图。每次我尝试n_distinct
或length
我分别计算两列中唯一值的数量,但不是总和。
ID Wave Party Party2013
1 1 A A
1 2 A NA
1 3 B NA
1 4 B NA
根据上面的示例,我通常会得到3而不是期望的2的计数。我尝试了以下命令,但只得到了单独的唯一值的数量:
data %>% group_by(ID) %>% distinct(Party, Party2013, .keep_all = TRUE) %> dplyr::summarise(Party_Party2013 = n())
或者
ddply(data, .(ID), mutate, count = length(unique(Party, Party2013)))
预期结果如下:
ID Wave Party Party2013 Count
1 1 A A 2
1 2 A NA 2
1 3 B NA 2
1 4 B NA 2
2 1 A C 3
2 2 B NA 3
2 3 B NA 3
2 4 B NA 3
我非常感谢有关如何计算每组两列中唯一方的总数而不是每列不同值的数量的任何建议。谢谢。
解决方案
在这种情况下,我总是喜欢简化问题并将数据更改为长格式,因为如果您的所有值都在一个列中,则更容易解决此类问题。pivot_longer()
您还可以使用示例中计算的values_drop_na = TRUE
drop参数NAs
:
library(tidyr)
library(dplyr)
data <- read.table(text =
"ID Wave Party Party2013
1 1 A A
1 2 A NA
1 3 B NA
1 4 B NA
2 1 A C
2 2 B NA
2 3 B NA
2 4 B NA", header = TRUE)
data %>% pivot_longer(cols = starts_with("Party"), values_drop_na = TRUE) %>% group_by(ID) %>%
summarise(Count = n_distinct(value)) %>% merge(data, .)
#> ID Wave Party Party2013 Count
#> 1 1 1 A A 2
#> 2 1 2 A <NA> 2
#> 3 1 3 B <NA> 2
#> 4 1 4 B <NA> 2
#> 5 2 1 A C 3
#> 6 2 2 B <NA> 3
#> 7 2 3 B <NA> 3
#> 8 2 4 B <NA> 3
由reprex 包于 2021-08-30 创建(v2.0.1)
推荐阅读
- android - adjustPan 和 NestedScrollView 的交互
- php - gmail中用蓝线显示的地址和电话号码
- c# - 身份服务器授权代码流示例 - 读取声明
- angular - Angular 6 - 通过服务将消息传递到从组件到消息组件
- mkmapview - 地图视图快速水平翻转
- java - 在 groovy / java 中递归解析 XML
- c# - 错误上传/下载文件到/从便携式设备使用
- angular - Angular 6 Uncaught ReferenceError:未定义缓冲区
- iis - 在 ASP.NET 中使用模拟 使用 .NET Framework 4.6.1 在 IIS 中托管
- sql - 合并oracle中表中的两行,除生效日期外,所有详细信息都相同