我认为这可能是一个非常简单的问题,但我一生都无法在网上或我用来学习 R 的书中找到答案。
我正在尝试使用基于现有矩阵向量中的值命名的变量创建一个表。这是向量或兴趣如何出现在表中的示例(名为“阈值”),我正在使用变量名称出现的位置 -
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)
}
这将创建包含 81 个列的“newtable”,其中前六列将命名为 BMXBMI_high、BMXCALF_low、BMXHT_high、BMXLEG_low、BMXSUB_high、BMXTHICR_high。我的 ifelse 语句似乎很好——我在循环之外对其进行了测试,并且它有效。我想我使用不正确的语法来创建变量名。
任何关于我应该做什么或我应该如何寻找答案的建议将不胜感激。我认为我无法找到答案的部分原因是我使用了不正确的词汇/搜索词。谢谢!
@Ben- 正如您似乎预测的那样,我的 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}
}
}
再次,非常感谢您提供的任何帮助!