如何根据频率将colnames转换为text/vectors?

How to convert colnames into text/vectors based on the frequency?

假设我有这样一个数据框:

df <- data.frame(ID=c('A','B','C'),Var1=c(2,6,2),Var2=c(0,3,1),Var3 = c(2,0,3))

我想将我的数据框转换成这样:

ID Variables
A  Var1 Var1 Var3 Var3
B  Var1 Var1 Var1 Var1 Var1 Var1 Var2 Var2 Var2 
C  Var1 Var1 Var2 Var3 Var3 Var3

通常,Variables 列等于 rep('Colnames Here','Frequency')

需要帮助 ;)

tidyverse:

library(tidyverse)

df %>%
  gather(var, val, -ID) %>%
  filter(val != 0) %>%
  mutate(Variables = map2_chr(var, val, ~paste(rep(.x, .y), collapse = ' '))) %>%
  group_by(ID) %>%
  summarize(Variables = paste(Variables, collapse = ' '))

输出:

# A tibble: 3 x 2
  ID    Variables                                   
  <fct> <chr>                                       
1 A     Var1 Var1 Var3 Var3                         
2 B     Var1 Var1 Var1 Var1 Var1 Var1 Var2 Var2 Var2
3 C     Var1 Var1 Var2 Var3 Var3 Var3