2016-09-29 12 views
0

例を説明します。数字を挿入します(たとえば、my input is 2010000)。そして、3番目の行の値のccompare sumをmy input :3行目の要素の合計< =私の入力)私の条件がTrueになるまで、最初の行と2番目の行の値を取得する必要があります。 例えば201万の場合、Iは条件付き要素行を取得する - R

1 2 3 4 
-1 -1 -1 -1 

P.Sを取得する必要があります。私は、第三の行の最後の正の値を読み取るべきではありません。

私はfor loopsでそれを行うことができますが、あなたが知っているように、ループは

おかげ

は、マイデータはR.ための高速ではありません。

1  2  3  4  10  37  NA 
-1  -1  -1  -1  -1  -1  -6 
549493 217514 732961 506807 113712 139339 2259826 
+0

あなたのデータは[再現性]ではありません(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – Sotos

+0

私はそれが容易になるだろうと思いますあなたがデータセット( 't_df < - as.data.frame(t(df))')を転置し、 't_df [which(cumsum(t_df $ V3)<= 2010000)、1:2]' – Sotos

+0

@ 。しかし、あなたの答えは 't_df [1:2、(cumsum(t_df $ V3)<= 2010000)]'でなければならないと思います。 :) –

答えて

0

あなたのソリューションは、おそらく可能性が

#setting up a data frame with your data structure 
row1 <- c(1,2,3,4,10,37,NA) 
row2 <- c(-1,-1,-1,-1,-1,-1,-6) 
row3 <- c(549493,217514,732961,506807,113712,139339,2259826) 

df <- rbind(row1,row2,row3) 

#generating a row4 with sums upto that point 
row4 <- sapply(1:length(df[3,]),function(x) sum(df[3,1:x])) 

#your input 
input <- c(2010000) 

#logical vector where your condition is reached 
row5 <- row4<input 

#index where the summation is <= input 
index <- min(which(row5 == FALSE)) 

#your results 
answer_row1 <- row1[1:index] 
answer_row2 <- row2[1:index] 

#youv can format your results which ever way you want now that you 
#have the value of #index 

これが動作すれば教えてください

Lune3141

関連する問題