我有一个数据框,我按以下方式读入R
Selector(Class.methodName)
然后我想创建一个名为"的高级专栏"在哪里" 1"如果导入数据中的任何列(其中28个)等于" 1065"或者" 1072",否则为0。因此我使用了:
morbiditydata <-fread("data.csv", nrows=502647, select=c(2458:2486))
然而,这会产生错误
dim(X)必须具有正长度
我该如何解决这个问题?
如果有帮助,这将产生类似的表格:
morbiditydata$hypertens<-apply(morbiditydata[,c(1:28)], MARGIN=1, function(x) {ifelse(x==1065 | x==1072, "1","0")})
答案 0 :(得分:0)
我们可以使用data.table
方法
nm1 <- names(morbiditydata)[1:28]
morbiditydata[, (nm1) := lapply(.SD, function(x)
as.integer(x %in% c(1065, 1072))), .SDcols = nm1]
关于OP代码中的错误,data.table
中的列在使用数字索引时使用with=FALSE
进行了子集化,即
t(apply(morbiditydata[,1:28, with = FALSE], 1,
function(x) {ifelse(x==1065 | x==1072, "1","0")}))
使用OP的例子'df'
nm1 <- names(df)[1:2]
setDT(df)[, (nm1) := lapply(.SD, function(x)
as.integer(x %in% c(1065, 1072))) ,.SDcols = nm1]
df
# a b c
#1: 0 0 9999
#2: 0 1 1065
#3: 1 1 1072
#4: 1 1 1072
#5: 0 0 0
#6: 0 0 1
set.seed(24)
morbiditydata <- as.data.table(matrix(sample(c(1065,
1072, 1:5), 5*30, replace=TRUE), ncol=30))