2016-04-28 2 views
0

一連のデータを処理しています。たとえば、nrow = 500 & ncol = 300です。ループを使用して正の値をフィルタリングして新しいテーブルに出力する

これは単なる例のためのものである:

V211  V212  V213  V214  V215  V216 
[1,] 2.6088731 2.5531749 2.6017147 2.6124385 2.7156729 2.7897892 
[2,] 1.4816736 0.9634576 0.9346004 0.9999343 -1.1096868 1.0848002 
[3,] 1.1547304 -0.9052018 0.9036510 0.8504258 0.8382223 0.9237510 
[4,] 1.0049771 0.9032115 0.8538077 -0.7911187 0.8244491 0.9172450 
[5,] 0.9888954 0.8589149 0.7850069 0.6574331 0.7917890 0.7667152 
[6,] -0.9577423 0.7662278 0.7767129 0.5639352 0.7559162 0.7118414 

各列は、正と負の数を有しています。私がしたいのは、各列の正数をフィルタリングし、それらの数値を新しい行列に書き込むことです。

  1. 読み取り.CSVデータを "データ"
  2. 新しい行列 "新しい" マトリックスを作成する(0500300)
  3. を使用してループ

    for (i in 1:300) 
    
        {a=data[which(data[,i]>0)] 
    
        new[,i]=print(a)} 
    
マトリックスとして:私が行っている何

問題が発生しました:

ではなく、データ自体(例)のデータの位置のみを示している:

[,238] [,239] [,240] [,241] [,242] [,243] [,244] [,245] [,246] 
[1,]  1  1  1  1  1  1  1  1  1 
[2,]  2  2  2  2  2  2  2  2  2 
[3,]  3  3  3  3  3  3  3  3  3 
[4,]  4  4  4  4  4  4  4  4  4 
[5,]  5  5  5  5  5  5  5  5  5 
[6,]  6  6  6  6  6  6  6  6  6 

iは別の可能な解決策を探してきたが、私は、各列のヘッダを有する大部分のデータを見つけたもの。私にはシリーズがたくさんあるので、ひとつずつ名前を付けるには長い時間が必要です。

私にいくつかアドバイスを残してください!おかげ

+0

すべての列で肯定エントリの数が等しくないため、結果は行列にはなりません。また、 'for'ループはここでは最適なツールではありません。 – Roland

+0

または、負の値を「NA」に設定するだけですか? – Roland

+0

は負の値をNAに設定することをお勧めします。どうすればいい?ありがとう@ローランド – beboo23

答えて

0

再現性の例:

set.seed(42) 
m <- matrix(rnorm(16), 4) 
#   [,1]  [,2]  [,3]  [,4] 
#[1,] 1.3709584 0.40426832 2.0184237 -1.3888607 
#[2,] -0.5646982 -0.10612452 -0.0627141 -0.2787888 
#[3,] 0.3631284 1.51152200 1.3048697 -0.1333213 
#[4,] 0.6328626 -0.09465904 2.2866454 0.6359504 

#copy the matrix 
mpos <- m 
#assignment to subset 
mpos[mpos < 0] <- NA 
#   [,1]  [,2]  [,3]  [,4] 
#[1,] 1.3709584 0.4042683 2.018424  NA 
#[2,]  NA  NA  NA  NA 
#[3,] 0.3631284 1.5115220 1.304870  NA 
#[4,] 0.6328626  NA 2.286645 0.6359504 

あなたはhelp("[")を検討すべきです。

+0

はいそれは動作します。好奇心から、最初のループのアプローチに関して、どのようにして各列の正数を選んで新しいテーブルに書き込むことができますか? – beboo23

+0

私が言ったように、サブセットの長さが等しくないので、あなたのアプローチはうまくいかない。 – Roland

+0

最後の質問ですが、私は(各長さが異なる)各列から正の数のデータの半分を取り出したいと思います。ループは異なる長さでは機能しないので、実際にはどうすればよいですか? – beboo23