我有一個大的數據框在R組成的4列和數千行。 這裏是第一線作爲一個例子:如何將列中的值與使用R的列中的值進行比較?
ID V1 V2 Stimulus
[1,] 001 74.80 803.0 0
[2,] 001 75.98 790.9 0
[3,] 001 75.95 791.1 0
[4,] 001 65.70 918.7 0
[5,] 001 59.63 1005.6 13
[6,] 001 59.44 1012.0 13
[7,] 001 59.62 1010.0 13
[8,] 001 63.85 942.4 13
[9,] 001 60.75 992.9 0
[10,] 001 59.62 1010.0 0
[11,] 001 61.68 974.0 0
[12,] 001 65.21 921.4 15
[13,] 001 59.23 1012.0 15
[14,] 001 61.23 979.5 15
[15,] 001 70.80 849.2 0
在該數據幀的每個行對應於1秒。列4(刺激)是0(即無刺激)或大於0的正整數(即刺激數)。激勵號碼總是由一個或多個0值分開)。
我想了解如何比較列4(刺激)中的每一個數值與前一行的值:從這個比較我想創建第5列在數據框中寫我「如果值爲0,則爲「PRE」;當值再次改變時(但僅針對前2行/秒),「OK」和其餘數字行不同於0的「POST」。
這是想什麼,我從以前的數據幀獲得
ID V1 V2 Stimulus Status
[1,] 001 74.80 803.0 0 PRE
[2,] 001 75.98 790.9 0 PRE
[3,] 001 75.95 791.1 0 PRE
[4,] 001 65.70 918.7 0 PRE
[5,] 001 59.63 1005.6 13 OK
[6,] 001 59.44 1012.0 13 OK
[7,] 001 59.62 1010.0 13 POST
[8,] 001 63.85 942.4 13 POST
[9,] 001 60.75 992.9 0 PRE
[10,] 001 59.62 1010.0 0 PRE
[11,] 001 61.68 974.0 0 PRE
[12,] 001 65.21 921.4 15 OK
[13,] 001 59.23 1012.0 15 OK
[14,] 001 61.23 979.5 15 POST
[15,] 001 70.80 849.2 0 PRE
注意,行7,8和14我有值「POST」(OK價值歸因只是一個例子當檢測到從0值變化時的前2行)。
我不知道如何解決這個問題。我的想法如下: 我應該在數據框的第4列循環播放每一行。對於每一行我 我應該檢查它是否比前一行更大
mydataframe$Stimulus[i,4] > mydataframe$Stimulus[i-1,4]
如果是這樣我添加值「OK」新列,但只是第2行,那麼我想補充列5(狀態)中的值「POST」直到列4(刺激)的值變爲零。
我想要創建的第5列也可以是一個單獨的一列數據框,其行數與原始數據幀的行數相同。沒關係,我可以在原始數據幀處和原始數據幀處。
我的(理論)方法很好嗎?有沒有更簡單的方法來實現這一目標?
謝謝你太棒了!如果不是OK和POST,我想顯示一個從1開始的遞進數(例如1,2,3 ...),直到我遇到另一個0爲止,我會在else語句中放入什麼?我試過用[code] else rep(rownames(dat),length(x)))[/ code]它可以工作,但它給了我很多警告(在'split < - 。default'('* tmp *',g, value = lapply(split(x,...:要替換的項目數不是替換長度的倍數) – Albz 2013-03-05 16:14:11
@Albz您可以用'seq(x)'替換'else'語句。 1到'x'的長度。 – 2013-03-05 17:53:08
非常感謝 – Albz 2013-03-06 09:59:58