How can I collect_ in all columns except one?

I need to gather_ for all columns of the data frame except one. Example:

 # I want to generate a dataframe whose column names are the letters of the alphabet. If you know of a simpler way, let me know! foo <- as.data.frame(matrix(runif(100), 10, 10)) colnames(foo) <- letters[1:10] 

Now suppose that I want to collect all the columns except column e . This will not work:

 mycol <- "e" foo_melt <- gather_(foo, key = "variable", value = "value", -mycol) #Error in -mycol : invalid argument to unary operator 

It will be:

 column_list <- colnames(foo) column_list <- column_list[column_list != mycol] foo_melt <- gather_(foo, key = "variable", value = "value", column_list) 

It looks pretty confusing if you ask me. Is there an easier way?

+5
source share
2 answers

One parameter one_of with gather

 res1 <- gather(foo, key = "variable", value = "value", -one_of(mycol)) 

and if we need to gather_ , then setdiff can be used

 res2 <- gather_(foo, key = "variable", value = "value", setdiff(names(foo), mycol)) identical(res1, res2) #[1] TRUE dim(res1) #[1] 90 3 head(res1, 3) # e variable value #1 0.8484310 a 0.2730847 #2 0.0501665 a 0.8129584 #3 0.6689233 a 0.5457884 
+9
source

Try the following:

 foo_melt <- gather_(foo, key = "variable", value = "value",names(foo)[-5]) 

This will give you all columns except the 5th ("e").

 > head(foo_melt) e variable value 1 0.6359394 a 0.9567835 2 0.1558724 a 0.7778139 3 0.1418696 a 0.2132809 4 0.7184244 a 0.4539194 5 0.4487064 a 0.1049392 6 0.5963304 a 0.8692680 
+1
source

Source: https://habr.com/ru/post/1260156/


All Articles