r语言 - 如何根据频率将同名转换为文本/向量



假设我有一个这样的数据帧:

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

最新更新