【发布时间】:2015-02-10 04:52:09
【问题描述】:
我有一个数据框 (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。我不想写四个循环,这就是我被卡住的原因。
【问题讨论】:
-
倒数第二段的错字:CAvalue、VTvalue、NCvalue、AZvalue,而不是时间。
-
预期输出是什么
-
我计划获得 4 个新变量 CA1 VT1 NC1 AZ1。例如,如果 CAvalue>1,则 CA1=1,否则,CA1=0。我的原始数据集有 50 个这样的变量,所以我不能在每个循环中编写 CAvalue>1、VTvalue>1 等 50 个基本循环。
-
我的代码有错误,
=exp required r(100);但可能是因为我在 linux 上运行它。 -
但也许这没关系,我会第二次@rawr 并要求您发布您想要的输出,这应该很容易弄清楚。