r - 确定一个值是否被 R 中的组重复
问题描述
我有一个包含许多列和行的数据。我想通过创建新的逻辑变量来确定组的值是否重复(相同)。
所以我的数据看起来像这样:
v0 <- c(1,2,3,4,5,6,7,8,9)
v1 <- c("a", "b", "a", "c","e", "c", "b", "b", "e")
v2 <- c("R", NA, "R", "R", "G","C", "R", "R", "G")
dftest <- data.frame(v0, v1, v2)
v0 v1 v2
1 1 a R
2 2 b <NA>
3 3 a R
4 4 c R
5 5 e G
6 6 c C
7 7 b R
8 8 b R
9 9 e G
我需要以相同的 v1 值是否采用相同的 v2 值的方式比较 v1 和 v2 的值。所以我的输出 df 看起来像这样:
v3 <- c(T, F, T, F, T, F, F, F, T )
dfresult <- data.frame(v0, v1, v2, v3)
v0 v1 v2 v3
1 1 a R TRUE
2 2 b <NA> FALSE
3 3 a R TRUE
4 4 c R FALSE
5 5 e G TRUE
6 6 c C FALSE
7 7 b R FALSE
8 8 b R FALSE
9 9 e G TRUE
任何下垂将不胜感激。谢谢。
解决方案
一种方法如下。就我看到您的问题而言,当组中只有一个唯一值时,您似乎想返回 TRUE v2
。否则,您想返回 FALSE。
library(dplyr)
group_by(dftest, v1) %>%
mutate(v3 = n_distinct(v2) == 1)
# v0 v1 v2 v3
# <dbl> <fct> <fct> <lgl>
#1 1 a R TRUE
#2 2 b NA FALSE
#3 3 a R TRUE
#4 4 c R FALSE
#5 5 e G TRUE
#6 6 c C FALSE
#7 7 b R FALSE
#8 8 b R FALSE
#9 9 e G TRUE
如果您使用 data.table 包,您可以执行以下操作。
setDT(dftest)[, v3 := uniqueN(v2) == 1, by = v1][]
推荐阅读
- phpstorm - 尽管配置了映射,但 PhpStorm 无法“全部同步”
- parameters - 在 DYMOLA 的注释中显示参数
- sql - 将 SQL 查询转换为 MDX - 具有 Group by 和 Count 函数
- r - 如何将前导数字标识符(不一定为零)添加到 r 中的字符串
- c# - iText 7 是否支持叙利亚语?
- google-sheets - 表单提交导致 Google 表格公式中的行跳过
- silverstripe-4 - 取消发布页面时出现 silverstripe 内部服务器错误
- php - [SQL Server]表附近的语法不正确
- css - 仅 CSS - 从自动转换到自动
- mysql - Insert same auto increment value to another column of same table