我试图在大型数据集中查找某个值的总计数。具体来说,我想创建一个名为"糖尿病的新变量"编码0/1表示否/是。这是一个例子:
Test <- data.frame(
s_1_1 = c(1223, NA, 1223, NA, NA),
s_1_2 = c(NA, 1223, NA, NA, NA),
s_1_2 = c(NA, NA, NA, NA, NA))
Disease0 <- paste("s_1_", 1:2, sep = "")
Test$Tp2Diabetes_0_0 <- apply(Test, 1, function(Db) as.integer(any(Db[Disease0] == 1223, na.rm = TRUE)))
当我在我的小例子上运行此代码时,它工作正常,并为我提供了我想要的结果。
diabetes = 1,1,1,0,0
问题是我在超过500k的数据集上运行它并且它不会产生所需的结果。例如,它显示500k中只有200人患有糖尿病,但整体数据显示我应该接近3,000。我不明白这里发生了什么以及我做错了什么。
答案 0 :(得分:1)
你应该选择这样简单的事情:
Test <- data.frame(
s_1_1 = c(1223, NA, 1223, NA, NA),
s_1_2 = c(NA, 1223, NA, NA, NA),
s_1_2 = c(NA, NA, NA, NA, NA))
Test$Tp2Diabetes_0_0 <- rowSums(Test==1223,na.rm=TRUE)>0
s_1_1 s_1_2 s_1_2.1 Tp2Diabetes_0_0
1 1223 NA NA TRUE
2 NA 1223 NA TRUE
3 1223 NA NA TRUE
4 NA NA NA FALSE
5 NA NA NA FALSE
或者如果您只需要前两列作为指标:
Test$Tp2Diabetes_0_0 <- rowSums(Test[,1:2]==1223,na.rm=TRUE)>0