Нет необходимости использовать apply
, поскольку для каждой строки у вас будет только одно значение, отличное от NA, мы можем получить это значение, используя max.col
, не беспокоясь о связях.
df$value <- df[cbind(1:nrow(df), max.col(!is.na(df)))]
df
# grp_A grp_B grp_C value
#1 13 NA NA 13
#2 NA 59 NA 59
#3 NA 66 NA 66
#4 NA NA 23 23
#5 NA NA 42 42
#6 20 NA NA 20
#7 NA NA NA NA
max.col
дает нам индекс номера столбца, который имеет максимальное значение для каждой строки, и, поскольку мы переносим его в !is.na
, он даст нам индекс TRUE
.
max.col(!is.na(df))
#[1] 1 2 2 3 3 1 2
Причина, по которой вы apply
не сработали, заключается в том, что в вашем последнем ряду было все NA
с, и x[!is.na(x)]
не сработал. Если вы удалите эту строку и запустите свою функцию, она будет работать
apply(df[-7, ], 1,function(x) x[!is.na(x)])
# 1 2 3 4 5 6
#13 59 66 23 42 20
Мы также можем узнать значение max
для каждой строки, удалив NA
, но это вернет -Inf
для строк со всеми NA
с
apply(df, 1,max, na.rm = TRUE)
#[1] 13 59 66 23 42 20 -Inf
SQLite не имеет булева типа: , Что поддерживают типы данных SQLite?
закомментированная строка, как это, должна работать, просто использовать целочисленные значения 1 и 0 в Ваших данных для представления булевской переменной.
Вам не нужно использовать какой-либо оператор сравнения для сравнения логического значения в предложении where.
Если ваш «логический» столбец называется is_selectable, ваше предложение where будет просто:
WHERE is_selectable
SQLite не имеет никакого встроенного булева типа - необходимо использовать целое число вместо этого. Кроме того, при сравнении значения с 'TRUE' и 't' Вы сравниваете его с теми значениями как строки, не как булевские переменные или целые числа, и поэтому сравнение всегда перестанет работать.
Источник: http://www.sqlite.org/datatype3.html