簡體   English   中英

(如何)在使用面板數據時,我可以像在 Stata(foreach 循環)中一樣輕松地在 R 中創建多個變量嗎?

[英](How) can I create mulitple variables in R similar as easily as in Stata (foreach loop) when working with panel data?

在 Stata 中處理面板數據時,可以像這樣一次創建和修改多個變量:

foreach wave of numlist 1/7 {
    clonevar vote`wave' = kp`wave'_190ab
    replace vote`wave' = 8 if v_intention`wave' == 0
}

在第一步中,此命令簡單地將變量kp1_190abkp2_190ab等復制並重命名為vote1vote2等。下一步是一個簡單的replace命令,它依賴於其他變量( v_intention1v_intention7 )。

是否可以在 R 中創建執行類似操作的循環? 在 Stata 中,可以使用通配符“x”非常有用,但我在 R 中找不到類似的東西。

[[就是你要找的。 這是一個不使用額外包的直接翻譯。

## DF is your data frame
for (wave in 1:7) {
    newvar <- paste0('vote',wave)
    DF[[newvar]] <- DF[[paste0('kp',wave,'_190ab')]]
    DF[DF[[paste0('v_intention',wave)]]==0, newvar] <- 8
}

您可以使用ifelseapply等使其更短,但想法相同。 我會將其編碼為:

f <- function(DF,srcfmt,wave,tstfmt) {
    srcvar <- sprintf(srcfmt, wave)
    tstvar <- sprintf(tstfmt, wave)
    ifelse(DF[[tstvar]] == 0, 8, DF[[srcvar]])
}
for (wave in 1:7) {
    DF[[paste0('vote',wave)]] <- f(DF,'kp%d_190ab',wave, 'v_intention%d')
}

上面的f可以寫在一長行上。

沒有數據框 ( DF ) 很難,但您仍然可以使用getassign來完成。 例如, assign(sprintf("b%d",4), get(sprintf("a%d",4)))等價於b4 <- a4 將其實現為沒有數據框的 function 將涉及環境( ?environment ),您會討厭它。 將所有內容包含在數據框中要簡單得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM