Я хочу, чтобы установить значения в несколько столбцов в таблице данных к 1, если они больше, чем 1.R: обновление столбцов таблицы данных по ссылке, используя функцию с «если»
Я пробовал много разных вещей. Код кажется, что он должен работать, но дает мне сообщение ниже код и удаляет первый столбец (V1)
DT <-as.data.table(matrix(1:9, 3,3))
cList <- c("V1","V2")
DT[,(cList) := lapply(.SD, function(x) if (x > 1) 1),.SDcols = cList]
Warning messages:
1: In if (x > 1) 1 :
the condition has length > 1 and only the first element will be used
2: In if (x > 1) 1 :
the condition has length > 1 and only the first element will be used
Любые предложения значительно (!) Оценили.
'x' является вектором и' if' принимает выражения длины один. Вы можете решить это с помощью 'ifelse', но если бы я был вами, я бы пошел с параметром' for (j in cList) (DT, i = which (DT [[j]]> 1L), j = j, value = 1L) 'или' ifelse' (не рекомендуется) будет 'DT [, (cList): = lapply (.SD, function (x) ifelse (x> 1L, 1L, x)), .SDcols = cList] ' –
Может быть,' DT [, (cList): = lapply (.SD, function (x) replace (x, x> 1, 1)), .SDcols = cList] 'может быть немного быстрее, чтобы сделать все это в пределах 'DT []' код типа. Однако первый бит DataDevidArenburg для кода data.table, вероятно, идеален для скорости. – thelatemail
Я пошел с тем, что вы предложили, с участием set (DT ...). Работал как шарм. Я пытался использовать набор раньше, но не думал использовать его. Как я могу ответить на эту галочку? – JerryN