2017-06-19 15 views
0

大規模なデータセットの特定の値の合計数を調べようとしています。具体的には、「糖尿病」と呼ばれる新しい変数を作成したいと思います。ここに例があります:大きなデータセットで機能しない関数

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以上のデータセットで実行していて、目的の結果が得られないということです。例えば、50万人のうち200人だけが糖尿病であることを示していますが、全体的なデータショーケースでは私は3,000に近づくべきであることを示しています。私はここで何が起こっているのか、私が間違っているのか理解していません。

+1

を多分あなたのデータセットを確認してください。あなたのレコードがテキスト/文字として格納されている場合、結果が乱雑になってしまうようなものは見えません。 –

+0

は明らかにタイプの問題です。あなたのデータ中のいくつかの1223は数字ではありません。文字列 "1223"のようないくつかの値はあなたの機能を壊します。 – fhlgood

+0

コメントありがとうございます。これらの変数は整数として分類されます。私はすべてを数値に変換しようとしましたが、空白を取り除くだけで同じ結果が得られました。ここで何をすべきかに関する提案はありますか? 1223と1223の両方を含むコマンドを追加できますか?ありがとう! – user7777508

答えて

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 

それとも、指標としてのみ最初の2つの列が必要な場合:

Test$Tp2Diabetes_0_0 <- rowSums(Test[,1:2]==1223,na.rm=TRUE)>0 
+0

私は列名で指定する必要があります...データのための3つの別々の収集日があり、私は各日付のためのカウントを持つ必要があります。 – user7777508

+0

列名で呼び出す: 'Test $ Tp2Diabetes_0_0 < - rowSums(Test [、c(" s_1_1 "、" s_1_2 ")] == 1223、na.rm = TRUE)> 0' –

+0

日付カウントは、あなたの例で日付がないので、もっと多くの情報が必要です –

関連する問題