r - 每个列表列中的唯一计数
问题描述
我有一个带有由 str_extract_all() 创建的列表列的数据框。我正在尝试确定存在超过 1 个唯一值的情况
#Input =
# List
#1: apple,apple
#2: apple,banana
#3: apple,orange,orange,banana``
dat<-data.table::data.table(
List = list(c("apple","apple"),
c("apple","banana"),
c("apple","orange","orange", "banana")),
Count_Unique = c(1L, 2L, 3L),
Multi = c(FALSE, TRUE, TRUE)
)
我尝试了 dplyr::mutate(Count_Unique = length(unique(List)),但这只是给了我整个数据集的唯一变量的数量。我确信它非常简单,我只是不知道如何做到这一点如果可能的话,使用 tidyverse 方法的逐行方式。
#Expected Output =
# List Count_Unique Multi
#1: apple,apple 1 FALSE
#2: apple,banana 2 TRUE
#3: apple,orange,orange,banana 3 TRUE
dat<-data.table::data.table(
List = list(c("apple","apple"),
c("apple","banana"),
c("apple","orange","orange", "banana")),
Count_Unique = c(1L, 2L, 3L),
Multi = c(FALSE, TRUE, TRUE)
)
解决方案
您可以使用map_dbl
:
library(dplyr)
library(purrr)
dat %>% mutate(Multi = map_dbl(List, n_distinct) > 1)
# List Count_Unique Multi
#1: apple,apple 1 FALSE
#2: apple,banana 2 TRUE
#3: apple,orange,orange,banana 3 TRUE
使用基础 R :
dat$Multi <- sapply(dat$List, function(x) length(unique(x))) > 1
或在data.table
:
library(data.table)
setDT(dat)[, Multi := sapply(List, function(x) length(unique(x))) > 1]
推荐阅读
- node.js - 使用firebase的弹性搜索没有响应?
- nuget - 在数据模型 nuget 中以哪个 .net 标准为目标?
- javascript - 如何在关闭 Ionic 应用程序时执行方法?
- python - 如何使用 selenium chrome 驱动程序 Python 3 登录代理服务器?
- c# - 在源自 Microsoft.AspNet.Web.Optimization (.net-framework) 的 ASP.NET Core 中使用“脚本”和“样式”
- java - Spring如何管理原型bean的完整生命周期?
- node.js - 如何为我的项目启用远程控制台(以角度编写)?
- java - 当我将 java 版本升级到 openJDK 11 时,加载模型映射器配置时出现 nullpointerException
- c# - 删除所有本地化文件并更改标准语言 c#
- python - 如何从父子目录导入模块