我有一个数据集,我试图按行检查大约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'
是否可以使用列表来实现我要实现的目标?
感谢您的帮助。
答案 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