gpt4 book ai didi

r - 循环创建虚拟变量 R

转载 作者:行者123 更新时间:2023-12-04 22:32:34 24 4
gpt4 key购买 nike

我正在尝试使用基于变量最频繁响应的循环生成虚拟变量(必须为 1/0)。经过大量的谷歌搜索,我还没有想出一个解决方案。我提取了最常见的响应(字符串,比如前 5 个是“A”、“B”、...、“E”)使用
top5<-names(head(sort(table(data$var1), decreasing = TRUE),5)
我希望循环检查另一个变量(“var2”)是否等于 A,如果是,则设置 =1,OW =0,然后使用聚合()给出摘要。在 Stata 中,我可以使用 `i' 引用循环变量 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 的每个元素各一个。如果 data$var2 中的行包含 1等于 'top5' 的相应元素:

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

如果您想要一列匹配 top5 中的任何一个它更容易:
data$dummies <- as.integer( data$var2 %in% top5 )
as.integer()在这两种情况下都用于转 TRUEFALSE10分别。

一个简化的例子来说明它是如何工作的:
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

关于r - 循环创建虚拟变量 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17070868/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com