如何在收集功能中排除多列

时间:2019-01-02 14:19:44

标签: r dplyr

我有一个由以下名称组成的列组成的数据:ID,A,B,C,A_5,B_5,C_5

我想使用gather()函数,以便排除ID,A_5,B_5C_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个以上的列。因此,通过它们的索引引用这些列将更加方便。这可能吗?如果是这样,如何实现?

我没有提供可重复的示例,因为这只是语法问题。我希望可以。

谢谢。

1 个答案:

答案 0 :(得分:1)

您的第二次尝试对我有用:

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)