我认为这可能是一个非常简单的问题,但是我不能在我的生活中在线或在我一直用来学习R的书中找到答案。使用R中的for循环中的对象创建变量名称
我正在尝试创建一个表,其中包含一个基于现有矩阵向量中值的变量。这里是(命名为“阈值”),我使用在变量名appears-
varname threshold_1_name threshold_1_value
1 BMXBMI high 25
2 BMXCALF low 40
3 BMXHT high 180
4 BMXLEG low 40
5 BMXSUB high 32
6 BMXTHICR high 65
表有81条记录,而我想要做的事的载体或兴趣如何出现在表中的例子像这样:
for (i in 1:81) {
varname1 <- paste(thresholds$varname[i], thresholds$threshold_1_name[i], sep = "_")
newtable$[varname1] <- ifelse((bigTable$[thresholds$varname[i]] < thresholds$threshold_1_value[i]),1,0)
}
这将创建 'newtable的' 与81列有姓名,其中前六列将被命名为BMXBMI_high,BMXCALF_low,BMXHT_high,BMXLEG_low,BMXSUB_high,BMXTHICR_high。我的ifelse语句似乎很好 - 我在循环之外测试了它,并且它工作正常。我想我使用不正确的语法来创建变量名称。
任何意见我应该做什么或我应该如何搜索答案将不胜感激。我认为我无法找到答案的一部分是因为我使用了不正确的词汇/搜索术语。谢谢!
@本 - 你似乎已经预测,我没有问题,我的ifelse线。以下是bigTable的示例(并且我在上面的'阈值'示例中添加了一列),以帮助您提供有关如何对问题进行排序的一些建议。我试图代码值的新变量为0/1,根据Bigtable中的值是否高于或低于“阈值”
BigTable的样本值:
BMXHT BMXBMI BMXLEG BMXCALF BMXWAIST BMXTHICR BMXTRI BMXSUB
1 174.0 24.90 NA 37.5 98.0 NA 12.8 20.4
2 178.3 29.10 45.2 42.6 99.9 56.2 17.4 38.6
3 162.0 22.56 39.7 34.0 81.6 47.0 20.3 16.8
4 162.9 29.39 43.0 37.2 90.7 55.7 26.4 34.2
5 190.1 30.94 46.6 43.7 108.0 64.0 15.5 26.6
6 180.0 30.62 46.0 40.5 112.8 57.1 26.2 NA
当我试图在一行代码中,我不断收到一个错误,说代码只是读取第一个条目,所以我现在正在尝试下面的代码段,它既非常低效,又不工作(前两行是你以前的代码发送) -
varname1 <- paste(thresholds$varname, thresholds$threshold_1_name, sep = "_")
bigTable[varname1[1:5]] <- NA
for (i in 1:5) {
value <- thresholds$threshold_1_value[i]
var <- thresholds$varname[i]
newvar <- varname1[i]
for(j in 1:10) {
if(bigTable[var[j]] > value) {bigTable[newvar] = 1}
else if (bigTable[var[j]] <= value) {bigTable[newvar] = 0}
}
}
再次,任何帮助,您可以提供非常感谢!
如何'varname1 [I]'和'$ newtable中的varname1'varname1'和[I]''而不是$ newtable的[varname1]'在循环分配的LHS? – Ben
你也可以发布'bigTable'。有更快的方法来做到这一点,但你也需要理解'$'和'[[''之间的区别。看看'?Extract'。 – mnel