跨多个列计算值

Count values across multiple columns

我有一个数据框 df 其中:

 a b    x  
 4 102  K  
 6 89   L, K, P
 7 46   P
 9 76   L
 0 29   L, K 
 1 690  P
 0 301  K

我已经使用 recast() 将其转换为:

 a  K   P    L   L, K, P   L, K 
 4  102
 6               89
 7      46
 9           76
 0                         29
 1      690
 0  301

不过,我希望它看起来像这样:

 a  K   P    L 
 4  102
 6  89  89   89        
 7      46
 9           76
 0  29       29   
 1      690
 0  301

我们可以在 'x' 列上使用 separate_rows,然后使用 pivot_wider

重塑为 'wide' 格式
library(dplyr)
library(tidyr)
df %>%
  mutate(rn = row_number()) %>% 
  separate_rows(x) %>%
  pivot_wider(names_from = x, values_from = b) %>%
  select(-rn)
# A tibble: 7 x 4
#      a     K     L     P
#  <int> <int> <int> <int>
#1     4   102    NA    NA
#2     6    89    89    89
#3     7    NA    NA    46
#4     9    NA    76    NA
#5     0    29    29    NA
#6     1    NA    NA   690
#7     0   301    NA    NA

数据

df <- structure(list(a = c(4L, 6L, 7L, 9L, 0L, 1L, 0L), b = c(102L, 
89L, 46L, 76L, 29L, 690L, 301L), x = c("K", "L, K, P", "P", "L", 
"L, K", "P", "K")), class = "data.frame", row.names = c(NA, -7L
))

也可以按如下方式进行

library(tidyverse)
df %>% 
  separate_rows(x) %>% 
  pivot_wider(a, names_from = x, values_from = b) %>% 
  unnest()