如何将变量名称作为值标签写入 R 中的另一个变量?

How can I write the names of variables as value labels into another variable in R?

我是 R 的新手。这是我的测试数据框。

test_df<-data.frame(QID=c(1,2,3,4,5,6,7),
                    ABC_ABC=c(1,0,1,1,0,1,0),
                    DEF_DEF=c(0,1,0,0,0,0,0),
                    GHJ_GHJ=c(0,0,0,0,1,0,0),
                    None=c(0,0,0,0,0,0,1),
                    model=c(1,2,1,1,3,1,4))

我想做的是将值标签添加到 test_df$model。应将值标签添加为列的名称。所以最终结果应该是 test_df$model:

我的真实数据集要大得多,变量的名称和位置经常变化,因此我需要以“自动化”的方式进行,它将列名作为值标签。

我尝试使用 for 循环,但我无法让它工作(我也读了很多次,在 R 中其他函数如 sapplylapply 等应该是使用而不是循环,但我想不出办法)。

如果需要任何其他代码来完全理解我的问题,请告诉我。

提前致谢!

您可以只通过 names() 使用列名,然后使用模型列中的索引(+1,因为 QID 应该被忽略)来创建新列或覆盖模型列:

test_df$model <- names(test_df)[test_df$model+1]
test_df$model
[1] "ABC_ABC" "DEF_DEF" "ABC_ABC" "ABC_ABC" "GHJ_GHJ" "ABC_ABC" "None" 

新列的创建将是: test_df$newColumn <- names(test_df)[test_df$model+1]

df<-data.frame(QID=c(1,2,3,4,5,6,7),
               ABC_ABC=c(1,0,1,1,0,1,0),
               DEF_DEF=c(0,1,0,0,0,0,0),
               GHJ_GHJ=c(0,0,0,0,1,0,0),
               None=c(0,0,0,0,0,0,1),
               model=c(1,2,1,1,3,1,4))

nm <- names(df)[-c(1, 6)]
index <- apply(df[, -c(1, 6)], 1, which.max)
df$model_name <- nm[index]

df
#>   QID ABC_ABC DEF_DEF GHJ_GHJ None model model_name
#> 1   1       1       0       0    0     1    ABC_ABC
#> 2   2       0       1       0    0     2    DEF_DEF
#> 3   3       1       0       0    0     1    ABC_ABC
#> 4   4       1       0       0    0     1    ABC_ABC
#> 5   5       0       0       1    0     3    GHJ_GHJ
#> 6   6       1       0       0    0     1    ABC_ABC
#> 7   7       0       0       0    1     4       None

reprex package (v2.0.1)

创建于 2022-01-17