a<-data.frame(q1=rep(c(1,'A','B'),4),q2=c(1,'A','B','C'),w1=c(1,'A','B','C'))
我想要的元素转换q1,q2
其!=1
到0
了,我只想使用[]
。我相信所有的子集可以这样做[]。
a[grep("q\\d",colnames(a),perl=TRUE)!=1,grep("q\\d",colnames(a),perl=TRUE)]<-0
但这不起作用,这是什么问题?
我们创建一个以'q'开头的数字索引的数字索引,后跟数字('nm1'),使用该索引对'a'中的列进行子集化,并将该子集中不等于1的值赋给0 。
nm1 <- grep("q\\d+", names(a))
a[nm1][a[nm1] != 1] <- 0
并确保我们有列作为character
类使用stringsAsFactors= FALSE
的data.frame
以上替换基于逻辑矩阵(a[nm1]!=1
),如果数据集确实很大,则可能会产生内存问题。在这种情况下,最好遍历各列并replace
使用0
a[nm1] <- lapply(a[nm1], function(x) replace(x, x!=1, 0))
a <- data.frame(q1=rep(c(1,'A','B'),4),q2=c(1,'A','B','C'),
w1=c(1,'A','B','C'), stringsAsFactors=FALSE)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句