如果您希望前 5 名中的每个项目都有一列,那么我将sapply
使用top5
. 不需要,ifelse
因为==
比较并给出TRUE
或如果比较为 TRUE,则为 1,否则为 0
top5
在这里,我们 cbind 一个 5 列的矩阵,如果 in 中的行data$var2
等于 'top5' 的相应元素,则每个元素对应一个包含 1 的元素:
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