2016-11-17 45 views
0

我的數據框看起來像這樣。 (它有〜300,000行) 我想更快,更優雅地做這個操作。 我該如何克服這個問題。提前致謝。如何將「for loop」轉換爲「應用家庭功能」

df <- data.frame(
    X = sample(0:1, 10, replace = T), 
    Y = sample(10:20, 10, replace = T) 
) 

for (i in 2:(nrow(df))) 
{ 
    if (df$X[i] == 0) 
    { 
     df$X[i] = df$Y[i - 1] 
    } 
} 
+0

這就是所謂的* 「矢量」 *。如*「如何矢量化這個滯後計算?」* – smci

回答

2

我們可以嘗試lag

df$X <- ifelse(df$X == 0, lag(df$Y), df$X) 

如果我們需要忽略第一行

df[2:nrow(df), ] <- with(df[2:nrow(df), ], ifelse(X == 0, lag(Y), X)) 
+0

如果我們在「if」語句中有2個賦值,該怎麼辦? 「ifelse」是否同樣工作? – xfactor

+0

@ xfactor我不確定我是否完全得到你。但是,大多數情況下,如果我們想將值分配給另一列,那麼我們需要編寫另一個類似的代碼行。 –