我有一個看起來像這樣在數據幀的列有條件變化值命名
set.seed(123)
test_data <- data.frame(id = 1:6,
var1 = rbinom(n = 6, size = 1, prob = .5),
var2 = rbinom(n = 6, size = 1, prob = .5),
age = sample(18:30, size = 6, replace = T))
我想用dplyr
或purrr
更改等於1 var1
和var2
值的數據幀,到他們的列的名稱,並保持0的方式。
結果看起來像這樣。
id var1 var2 age
1 0 var2 26
2 var1 var2 25
3 0 var2 19
4 var1 0 29
5 var1 var2 21
6 0 0 18
我一直在使用dplyr::mutate_at
mutate_at(test_data,
vars(var1, var2),
function(var_x) { ifelse(var_x == 1, colnames(var_x), var_x) })
這將返回下面的錯誤嘗試。所以,可能不是最好的選擇。
錯誤evalq(sys.calls()):置換具有長度 零此外:警告消息:在代表(是的,length.out = 長度(ANS)): 'x' 爲NULL這樣的結果將是NULL
而且我一直在使用purrr:map_at
map_at(test_data,
c("var1", "var2"),
function(var_x) { ifelse(var_x == 1, colnames(var_x), var_x) })
嘗試和這個返回此錯誤。
錯誤ANS [測試& OK] < - 代表(是的,length.out =長度(ANS))[試驗& OK]:更換具有長度零此外:警告消息:在 代表(是的,length.out =長度(ANS)):「x」爲NULL,那麼結果將是 NULL
雖然我寧願用dplyr
或purrr
工作,我願意用其他建議方法。
或者用'Map' - 'TEST_DATA [2:3] < - 地圖(函數(X,Y)取代(X,X == 1,y)時,TEST_DATA [2:3],名稱(test_data [2:3]))' – thelatemail