gpt4 book ai didi

r - 使用数据表而不是 plyr 在数据的任何元素中匹配模式

转载 作者:行者123 更新时间:2023-12-02 04:34:27 25 4
gpt4 key购买 nike

我有一个非常大的数据集,之前没有使用过data.table。我发现语法有点难以理解。我的主要问题是如何重现数据表的“应用”功能?

我的数据如下

dat1 <- structure(list(id = c(1L, 1L, 2L, 3L), diag1 = structure(1:4, .Label = c("I20.1","I21.3", "I48", "I60.8"), class = "factor"), diag2 = structure(c(3L,2L, 1L, 1L), .Label = c("", "I50", "I60.9"), class = "factor"), diag3 = structure(c(1L, 2L, 1L, 1L), .Label = c("", "I38.1"), class = "factor")), .Names = c("id", "diag1", "diag2", "diag3"), row.names = c(NA, -4L), class = "data.frame")

我想为所有在 I20、I21 或 I60 的列 diag1、diag2 或 diag 3 中具有诊断代码的记录添加一个变量。使用 apply 和 regex 我做了以下事情。

code.list <- c("I20","I21","I60")    
dat1$index <- apply(dat1[2:4],1, function(i) any(grep(paste(code.list,
collapse="|"), i)))

我得到我想要的最终数据集如下图所示

structure(list(id = c(1L, 1L, 2L, 3L), diag1 = structure(1:4, .Label = c("I20.1","I21.3", "I48", "I60.8"), class = "factor"), diag2 = structure(c(3L,2L, 1L, 1L), .Label = c("", "I50", "I60.9"), class = "factor"),diag3 = structure(c(1L, 2L, 1L, 1L), .Label = c("", "I38.1"), class = "factor"), index = c(TRUE, TRUE, FALSE, TRUE)), .Names = c("id","diag1", "diag2", "diag3", "index"), row.names = c(NA, -4L), class = "data.frame")

但是,使用 plyr 会花费太长时间。我希望获得数据表的语法。有人能帮忙吗?

提前致谢

一个

最佳答案

我们可以使用data.table

library(data.table)
setDT(dat1)[, index := Reduce(`|`, lapply(.SD, grepl,
pattern = paste(code.list, collapse="|"))), .SDcols = 2:4]
dat1
# id diag1 diag2 diag3 index
#1: 1 I20.1 I60.9 TRUE
#2: 1 I21.3 I50 I38.1 TRUE
#3: 2 I48 FALSE
#4: 3 I60.8 TRUE

关于r - 使用数据表而不是 plyr 在数据的任何元素中匹配模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44933077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com