我有一个由以下名称组成的列组成的数据: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个以上的列。因此,通过它们的索引引用这些列将更加方便。这可能吗?如果是这样,如何实现?
我没有提供可重复的示例,因为这只是语法问题。我希望可以。
谢谢。
答案 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)