gpt4 book ai didi

r - 如何将Stata中的foreach转换为R?

转载 作者:行者123 更新时间:2023-12-04 12:21:45 33 4
gpt4 key购买 nike

我有一个数据框 (df),其中包含 CA、VT、NC、AZ、CAvalue、VTvalue、NCvalue、AZvalue 等变量。

在Stata中,我可以使用foreach命令和 generate新变量:

foreach x in CA VT NC AZ {
gen `x'1 = 0
replace `x'1 = 1 if `x'value > 1
}

当我将此代码转换为 R 时,我发现它有问题。

这是我写的:
x=c("CA","VT","NC","AZ")
x_1=paste(x,"1",sep="")
m1=as.data.frame(matrix(0,ncol=length(x),nrow=NROW(df)))
colnames(m1)=x_1

虽然创建以“1”结尾的新变量没有问题,但我不知道如何转换以“replace”开头的行。我尝试用 CAtime、VTtime、NCtime 和 AZtime 创建另一个向量。但是我不知道如何在不写四次的情况下将它们合并到循环中。

更新:
最初,我的数据如下所示:
df=as.data.frame(matrix(runif(200,1,150),ncol=8,nrow=25))
name=c("CA","VT","NC","AZ","CAtime","VTtime", "NCtime","AZtime")
colnames(df)=name

然后我想在一个新的数据框 m1 中创建 4 个新变量 CA1, VT1, NC1, AZ1:
x=c("CA","VT","NC","AZ")
x_1=paste(x,"1",sep="")
m1=as.data.frame(matrix(0,ncol=length(x),nrow=NROW(df)))
colnames(m1)=x_1

m1=0 中的所有变量值。

然后,如果CAtime>1,我想要CA1=1中对应的单元格。这适用于所有四个变量 CAtime、VTtime、NCtime、AZtime。我不想写四个循环,这就是我被卡住的原因。

最佳答案

举个例子数据集df ,符合您的描述:

set.seed(1)
x <- c("CA","VT","NC","AZ")
df <- setNames(data.frame(replicate(8,sample(0:2,5,replace=TRUE),simplify=FALSE)),
c("CA","VT","NC","AZ","CAvalue","VTvalue","NCvalue","AZvalue"))
df

# CA VT NC AZ CAvalue VTvalue NCvalue AZvalue
#1 0 2 0 1 2 1 1 2
#2 1 2 0 2 0 0 1 2
#3 1 1 2 2 1 1 1 0
#4 2 1 1 1 0 2 0 2
#5 0 0 2 2 0 1 2 1

现在 lapply检查是否值 > 1跨每一列,并使用 1 将其重新分配给新变量附加到最后:
df[paste0(x,"1")] <- lapply(df[paste0(x,"value")], function(n) as.numeric(n > 1) )
df

# CA VT NC AZ CAvalue VTvalue NCvalue AZvalue CA1 VT1 NC1 AZ1
#1 0 2 0 1 2 1 1 2 1 0 0 1
#2 1 2 0 2 0 0 1 2 0 0 0 1
#3 1 1 2 2 1 1 1 0 0 0 0 0
#4 2 1 1 1 0 2 0 2 0 1 0 1
#5 0 0 2 2 0 1 2 1 0 0 1 0

关于r - 如何将Stata中的foreach转换为R?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28424377/

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