Если у меня ДФ
A B Col
1 1 A
2 2 B
1 2 C
2 1 D
1 3 E
2 3 F
Я пытаюсь использовать sqldf следующим образом
Test <- sqldf(" SELECT A,
case when A = '1' and B = '1' then Col else NULL end as Test_1,
case when A = '1' and B = '2' then Col else NULL end as Test_2,
case when A = '1' and B = '3' then Col else NULL end as Test_3,
case when A = '2' and B = '1' then Col else NULL end as Test_4,
case when A = '2' and B = '2' then Col else NULL end as Test_5,
case when A = '2' and B = '3' then Col else NULL end as Test_6
FROM DF
group by A;")
Однако он возвращает результат только для каждого случая A и других столбцов NULL, поэтому вместо желаемого
A Test1 Test2 Test3 Test4 Test5 Test6
1 A C E Null NULL NULL
2 NULL NULL NULL D B F
Я получаю только один результат для каждого A
A Test1 Test2 Test3 Test4 Test5 Test6
1 G NULL NULL Null NULL NULL
2 NULL NULL NULL NULL B NULL
Что я делаю неправильно и есть ли способ получить нужный мне формат?
GROUP BY
, так как вы все равно не выполняете агрегацию. - person Parfait   schedule 24.08.2017group by
, я получу результат, который имеет смысл (с 8 строками). СтолбецTest_1
- это «A» в первой строке и «G» в 7-й строке, обе строки ввода имеют A равно 1, а B равно 1. Вы каким-то образом хотите агрегировать это до просто «G» — так что вам нужно чтобы использовать агрегатную функцию вselect
сgroup by
- и вам нужно, чтобы эта функция выбирала "G", а не "A" в столбцеTest_1
. Точно так же, почему в столбцеTest_5
выбрано «B», а не «H»? Обе строки 2 и 8 соответствуют оператору case Test_5. - person Gregor Thomas   schedule 24.08.2017max()
илиmin()
, чтобы приблизиться к желаемому результату.max()
выберет G вместо A и H вместо B, min сделает наоборот. - person Gregor Thomas   schedule 24.08.2017max()
илиmin()
вокруг ваших операторов case. Познакомьтесь с агрегатными функциями. Всякий раз, когда вы используетеgroup by
, каждый столбец вselect
должен либо частью группировки или результатом агрегата. - person Gregor Thomas   schedule 24.08.2017