Как я использую булево поле в где пункт в SQLite?

Нет необходимости использовать 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
24
задан Peter Mortensen 26 January 2010 в 18:35
поделиться

3 ответа

SQLite не имеет булева типа: , Что поддерживают типы данных SQLite?

закомментированная строка, как это, должна работать, просто использовать целочисленные значения 1 и 0 в Ваших данных для представления булевской переменной.

19
ответ дан 28 November 2019 в 23:37
поделиться

Вам не нужно использовать какой-либо оператор сравнения для сравнения логического значения в предложении where.

Если ваш «логический» столбец называется is_selectable, ваше предложение where будет просто: WHERE is_selectable

18
ответ дан 28 November 2019 в 23:37
поделиться

SQLite не имеет никакого встроенного булева типа - необходимо использовать целое число вместо этого. Кроме того, при сравнении значения с 'TRUE' и 't' Вы сравниваете его с теми значениями как строки, не как булевские переменные или целые числа, и поэтому сравнение всегда перестанет работать.

Источник: http://www.sqlite.org/datatype3.html

5
ответ дан 28 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: