簡體   English   中英

R在for循環中處理列名

[英]R handling column names in a for loop

我有一個大約50,000 X 200的數據框。列名稱是4種不同的類型,末尾的數字范圍為1-50(store1,price1,time1,rate1,rate2,store2,price2,time2,rate2,...,store50 ,price50,time50,rate50)。 我試圖根據每個列的值創建偽變量,但在讓R處理循環內的列名時遇到麻煩。

store1    price1       time1      rate1     store2     price2    time2     rate2 ....
   A        55.55      08:09      1.44        B         44.44     11:09     1.46
   C        55.55      08:09      1.44        G         44.44     11:09     1.46
   X        55.55      08:09      1.44        E         44.44     11:09     1.46
   D        55.55      08:09      1.44        S         44.44     11:09     1.46

到目前為止,這是我一直沒有嘗試過的方法。

xform_data <- function(x) { 
       for(i in 1:50){
       storeX <-  (paste("store",i,sep="")) 
       storeX2  <- ifelse(storeX  == "A", 1, 2)
       x <- cbind(x, storeX2  )
       }
    x    
}

有什么建議么?

下面比較名稱而不是比較值:

ifelse(storeX  == "A", ...

嘗試:

ifelse(x[,storeX]  == "A", ...

同樣,所有新列都將稱為storeX2 您可能希望重命名它們:

x <- cbind(x, storeX2)
colnames(x)[length(colnames(x))] <- storeX2

(我確信有更優雅的方法可以做到這一點。)

@aix提供了使用循環執行此操作的正確方法,但是,根據最終結果的不同,您可能會發現使用其他一些工具更快或更容易。 諸如sapplylapply功能可用於以相同方式處理數據幀的每一列(或數據幀的子集)。 model.matrix函數將model.matrix將變量轉換為偽變量(0和1)。 其他可能有用的工具包括factor, switchmatch

暫無
暫無

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

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