我對 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:
- n=1,值 1 標記為“ABC_ABC”
- n=2,值 2 標記為“DEF_DEF”
- n=3,值 1 標記為“ABC_ABC”
- n=4,值 1 標記為“ABC_ABC”
- n=5,值 3 標記為“GHJ_GHJ”
- n=6,值 1 標記為“ABC_ABC”
- n=7,值 4 標記為“無”
我的真實資料集要大得多,變數的名稱和位置會定期變化,因此我需要以“自動”方式進行操作,將列名作為值標簽。
我嘗試使用 for 回圈,但無法使其作業(我也讀了很多次,在 R 中應該使用其他函式,如sapply,lapply等來代替回圈,但我想不出辦法)。
如果需要任何其他代碼來完全理解我的問題,請告訴我。
提前致謝!
uj5u.com熱心網友回復:
您可以通過 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]
uj5u.com熱心網友回復:
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 包創建于 2022-01-17 (v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/414309.html
標籤:
