[英]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提供了使用循環執行此操作的正確方法,但是,根據最終結果的不同,您可能會發現使用其他一些工具更快或更容易。 諸如sapply
和lapply
功能可用於以相同方式處理數據幀的每一列(或數據幀的子集)。 model.matrix
函數將model.matrix
將變量轉換為偽變量(0和1)。 其他可能有用的工具包括factor, switch
和match
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.