如何根据频率将姓氏转换为文本/向量?

时间:2019-01-30 19:40:36

标签: r text dplyr reshape

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

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')

需要帮助;)

1 个答案:

答案 0 :(得分:2)

使用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