功能不适用于较大的数据集

时间:2017-06-19 20:49:38

标签: r

我试图在大型数据集中查找某个值的总计数。具体来说,我想创建一个名为"糖尿病的新变量"编码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。我不明白这里发生了什么以及我做错了什么。

1 个答案:

答案 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