У меня есть данные, состоящие из столбцов со следующими именами: ID,A,B,C,A_5,B_5,C_5
Я хочу использовать функцию gather(), чтобы исключить ID,A_5,B_5 и C_5. Я знаю, что если бы я хотел исключить только ID, я мог бы написать:
df %>% gather(key = categories ,value = value, -ID)
Но я не мог придумать, как исключить сразу несколько столбцов. Я был бы очень признателен, если бы кто-нибудь сказал мне правильный синтаксис. До сих пор я пытался и потерпел неудачу с:
df %>% gather(key = categories ,value = value, -vars(ID,A_5,B_5,C_5)
df %>% gather(key = categories ,value = value, -c(ID,A_5,B_5,C_5)
df %>% gather(key = categories ,value = value, -list(ID,A_5,B_5,C_5)
df %>% gather(key = categories ,value = value, -list(ID,A_5,B_5,C_5)
Также у меня есть несколько других фреймов данных, с которыми я хотел бы выполнить ту же операцию. Все они имеют разную длину столбцов, и для некоторых мне нужно исключить более 10 столбцов. Таким образом, ссылаться на эти столбцы по их индексу было бы намного удобнее. Это возможно? Если да, то как этого добиться?
Я не привел воспроизводимого примера, поскольку это просто вопрос синтаксиса. Я надеюсь, что все в порядке.
Заранее спасибо.





Ваша вторая попытка работает для меня:
df <- data.frame(Col1 = c(1, 2, 2, 3), Col2 = c(7, 9, 8, 1), ID = "ID", A_5 = "Test1", B_5 = "Test2", C_5 = "Test3")
df %>% gather(key = categories, value = value, -c(ID, A_5, B_5, C_5))
Вывод:
ID A_5 B_5 C_5 categories value
1 ID Test1 Test2 Test3 Col1 1
2 ID Test1 Test2 Test3 Col1 2
3 ID Test1 Test2 Test3 Col1 2
4 ID Test1 Test2 Test3 Col1 3
5 ID Test1 Test2 Test3 Col2 7
6 ID Test1 Test2 Test3 Col2 9
7 ID Test1 Test2 Test3 Col2 8
8 ID Test1 Test2 Test3 Col2 1
Если по какой-то причине это не сработает, попробуйте обновить свои пакеты или указать имена столбцов: -c («ID», «A_5», «B_5», «C_5»)
Или, чтобы исключить использование индекса столбцов (тот же вывод):
toExclude <- names(df)[3:6]
df %>% gather(key = categories, value = value, -toExclude)
Ты прав. Я получал ошибку из-за какой-то другой синтаксической ошибки, видимо, второй вариант действительно работает. Но альтернатива с индексами еще лучше, спасибо большое.
df %>% gather(key = categories ,value = value, -ID, -A_5, -B_5, -C_5)? Илиdf %>% gather(key = categories ,value = value, -c(ID, A_5, B_5, C_5)