在列的列表中搜索R中的一组值

时间:2018-08-21 19:18:59

标签: r list

我有一个数据集,我试图按行检查大约25列以查看它们是否包含列表中的值。我在引用要搜索的值列表时没有问题,但是在一次搜索多个列时遇到了麻烦。最初,我想创建一个要引用的列的列表,但是由于您无法使用列表,所以这似乎行不通。

现在,我正在逐列检查每个列中的一组值,但是我希望用更少的代码来完成此操作,因为在清理这些数据时,我想多次引用该组列。这是我目前正在使用的:

Dx.Elem<-list(c("DX1", "DX2", "DX3", "DX4", "DX5", "DX6", "DX7", "DX8", "DX9", "DX10", "DX11", "DX12", "DX13", "DX14", "DX15", "DX16", "DX17", "DX18", 
              "DX19", "DX20", "DX21", "DX22", "DX23", "DX24", "DX25"))

Dx.Panc9<-list("86384", "86394", "86382", "86392", "86381", "86391", "86383", "86393")

mydata2$Panc9<-0
mydata2$Panc9[mydata2$DX1 %in% Dx.Panc9]<-1
mydata2$Panc9[mydata2$DX2 %in% Dx.Panc9]<-1
mydata2$Panc9[mydata2$DX3 %in% Dx.Panc9]<-1
mydata2$Panc9[mydata2$DX4 %in% Dx.Panc9]<-1

1的分配实际上用于引用mydata2 $ DX25,我在此处将其切断以保留冗余。

我尝试替换引用列表,但这是行不通的,因为它不能使用列表。

mydata2$Panc9[mydata2[, Dx.Elem] %in% Dx.Panc9]<-1

我得到这个错误

Error in .subset(x, j) : invalid subscript type 'list'

是否可以使用列表来实现我要实现的目标?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

针对您的具体情况:

lapply(mydata2[Dx.Elem], `%in%`, Dx.Panc9)

带有一些示例数据:

# create example data
set.seed(1234)
df <- data.frame(
    x1 = round(runif(100, 1, 10)),
    x2 = round(runif(100, 1, 10)),
    x3 = round(runif(100, 1, 10)),
    x4 = round(runif(100, 1, 10)),
    x5 = round(runif(100, 1, 10))
)

# vector of numbers to search for (like Dx.Panc9)
numcheck <- c(2, 4)

# columns of data.frame in which to search (like Dx.Elem)
mycols <- c("x2", "x3", "x4", "x5")

# perform the check
result_list <- lapply(df[mycols], `%in%`, numcheck)

这将返回一个列表,其中每个元素都是长度为nrow(df)的向量。如果您的问题是 any 列中是否包含所需的数字,则可以执行以下操作:

result_df <- data.frame(result_list)
rowSums(result_df) > 0