簡體   English   中英

循環創建虛擬變量R.

[英]Loop to create dummy variable R

我試圖使用基於變量的最頻繁響應的循環來生成虛擬變量(必須是1/0)。 經過大量的谷歌搜索,我還沒有設法找到解決方案。 我已經提取了最頻繁的響應(字符串,比如說前五名是“A”,“B”,......,“E”)

top5<-names(head(sort(table(data$var1), decreasing = TRUE),5)

我想循環檢查另一個變量(“var2”)是否等於A,如果這樣設置= 1,OW = 0,然后使用aggregate()給出摘要。 在Stata中,我可以使用`i'來引用循環變量,但不能在R中引用...不起作用的代碼是:

for(i in top5) {
   data$i.dummy <- ifelse(data$var2=="i",1,0)
   aggregate(data$i.dummy~data$age+data$year,data,mean)
}

有什么建議么?

如果你想在你的前5名每件一列,然后我會用sapply沿元素top5 不需要ifelse因為==比較並且如果比較為TRUE則給出TRUE或1,否則為0

在這里,我們cbind 5列,矩陣,其每一對的每個元素的一個top5含有1如果在該行data$var2等於“TOP5”的相應的元件:

data <- cbind( data , sapply( top5 , function(x) as.integer( data$var2 == x ) ) )

如果你想要一個列匹配任何top5匹配,那就更容易了:

data$dummies <- as.integer( data$var2 %in% top5 )

兩種情況下的as.integer()分別用於將TRUEFALSE變為10

一個簡短的例子來說明它是如何工作的:

set.seed(123)
top2 <- c("A","B")
data <- data.frame( var2 = sample(LETTERS[1:4],6,repl=TRUE) )

#  Make dummy variables, one column for each element in topX vector
data <- cbind( data , sapply( top2 , function(x) as.integer( data$var2 == x ) ) )
data
#  var2 A B
#1    B 0 1
#2    D 0 0
#3    B 0 1
#4    D 0 0
#5    D 0 0
#6    A 1 0

#  Make single column for all elements in topX vector
data$ANY <- as.integer( data$var2 %in% top2 )
data
#  var2 ANY A B
#1    B   1 0 1
#2    D   0 0 0
#3    B   1 0 1
#4    D   0 0 0
#5    D   0 0 0
#6    A   1 1 0

看到fortune(312) ,然后閱讀幫助?"[["可能是paste0的幫助。

然后可能考慮使用其他工具,如model.matrixsapply而不是自己使用循環。

暫無
暫無

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

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