2014-10-10 53 views
0

這對R腳本中的零經驗證明是一個怪物。我有57列,數據的30行的數據幀R函數用於計算某個值的頻率低於特定值的頻率

這裏就是我想要做:

1)到各列:

2)計數的時間2號/連續3/4/5/6/7/8/9值小於-1

3)打印結果作爲文本文件

4)重複步驟2和3的第二列,因此on

我環顧四周,也於r計算器

check number of times consecutive value appear based on a certain criteria

這是我的一列數據:

data<-c(-0.996,-1.111,-0.638,0.047,0.694,1.901,2.863,2.611,2.56,2.016,0.929,-0.153,-0.617,-0.143 
0.199,0.556,0.353,-0.638,0.347,0.045,-0.829,-0.882,-1.143,-0.869,0.619,0.923,-0.474,0.227 
0.394,0.789,1.962,1.132,0.1,-0.278,-0.303,-0.606,-0.705,-0.858,-0.723,-0.081,1.206,2.329 
1.863,2.1,1.547,2.026,0.015,-0.441,-0.371,-0.304,-0.668,-0.953,-1.256,-1.185,-0.891,-0.569 
0.485,0.421,-0.004,0.024,-0.39,-0.58,-1.178,-1.101,-0.882,0.01,0.052,-0.166,-1.703,-1.048 
-0.718,-0.036,-0.561,-0.08,0.272,-0.041,-0.811,-0.929,-0.853,-1.047,0.431,0.576,0.642,1.62 
2.324,1.251,1.384,0.195,-0.081,-0.335,-0.176,1.089,-0.602,-1.134,-1.356,-1.203,-0.795,-0.752 
-0.692,-0.813,-1.172,-0.387,-0.079,-0.374,-0.157,0.263,0.313,0.975,2.298,1.71,0.229,-0.313 
-0.779,-1.12,-1.102,-1.01,-0.86,-1.118,-1.211,-1.081,-1.156,-0.972) 

當我運行下面的代碼:

for (col in 1:ncol(data)) { 
    runs <- rle(data[,col]) 
    print(runs$lengths[which(runs$values < -1)]) 
} 

它給我這個:

[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

它已經計算了數值< -1但未運行。這是我在這裏錯了嗎?

回答

1

(大量編輯)

固定數據載體(缺少逗號):

data <- c(-0.996,-1.111,-0.638,0.047,0.694,1.901,2.863,2.611,2.56,2.016,0.929,-0.153,-0.617,-0.143, 
      0.199,0.556,0.353,-0.638,0.347,0.045,-0.829,-0.882,-1.143,-0.869,0.619,0.923,-0.474,0.227, 
      0.394,0.789,1.962,1.132,0.1,-0.278,-0.303,-0.606,-0.705,-0.858,-0.723,-0.081,1.206,2.329, 
      1.863,2.1,1.547,2.026,0.015,-0.441,-0.371,-0.304,-0.668,-0.953,-1.256,-1.185,-0.891,-0.569, 
      0.485,0.421,-0.004,0.024,-0.39,-0.58,-1.178,-1.101,-0.882,0.01,0.052,-0.166,-1.703,-1.048, 
      -0.718,-0.036,-0.561,-0.08,0.272,-0.041,-0.811,-0.929,-0.853,-1.047,0.431,0.576,0.642,1.62, 
      2.324,1.251,1.384,0.195,-0.081,-0.335,-0.176,1.089,-0.602,-1.134,-1.356,-1.203,-0.795,-0.752, 
      -0.692,-0.813,-1.172,-0.387,-0.079,-0.374,-0.157,0.263,0.313,0.975,2.298,1.71,0.229,-0.313, 
      -0.779,-1.12,-1.102,-1.01,-0.86,-1.118,-1.211,-1.081,-1.156,-0.972) 

data < -1爲您提供了一個合乎邏輯的載體,我們可以指望的TRUE & FALSE運行:

runs <- rle(data < -1) 

print(runs) 

## Run Length Encoding 
## lengths: int [1:21] 1 1 20 1 29 2 8 2 4 2 ... 
## values : logi [1:21] FALSE TRUE FALSE TRUE FALSE TRUE ... 

然後提取長度只有TRUE運行:

print(runs$lengths[which(runs$values)]) 
## [1] 1 1 2 2 2 1 3 1 3 4 

和如前所示,迭代的數據幀的列:

# make a data frame from sampled versions of data 

set.seed(1492) # repeatable 

df <- data.frame(V1=data, 
       V2=sample(data, length(data), replace=TRUE), 
       V3=sample(data, length(data), replace=TRUE), 
       V4=sample(data, length(data), replace=TRUE)) 

# do the extraction 

for (col in 1:ncol(df)) { 
    runs <- rle(df[, col] < -1) 
    print(runs$lengths[which(runs$values)]) 
} 

## [1] 1 1 2 2 2 1 3 1 3 4 
## [1] 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 1 1 1 
## [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
+0

感謝。我跑了腳本,但它沒有給我跑。我編輯了這個問題,以反映我的問題 – user53020 2014-10-10 14:45:28

+0

更新了答案 – hrbrmstr 2014-10-10 14:53:20

+0

謝謝,但這只是一個向量的權利?如果我需要對數據框中的所有列重複此操作,該怎麼辦? – user53020 2014-10-10 14:56:33