[英]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()
分別用於將TRUE
或FALSE
變為1
和0
。
一個簡短的例子來說明它是如何工作的:
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.matrix
和sapply
而不是自己使用循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.