使用DPLYR为每列计算数字范围内的所有值

使用DPLYR为每列计算数字范围内的所有值,r,dplyr,R,Dplyr,我有以下示例数据框: df <- data.frame("Alpha" = c(NA, NA, 6, 5, 4, 6, 5, 3), "Beta" = c(3, 3, 4, 2, 6, NA, NA, NA), "Gamma" =c(6, 2, 3, 1, NA, NA, 5, 4)) df可能是这样的: result <- data.frame("value"=c(0, 1, 2, 3, 4, 5, 6), "Alpha"=c(0, 0,

我有以下示例数据框:

df <- data.frame("Alpha" = c(NA, NA, 6, 5, 4, 6, 5, 3), "Beta" = c(3, 3, 4, 2, 6, NA, NA, NA), "Gamma" =c(6, 2, 3, 1, NA, NA, 5, 4))

df可能是这样的:

result <- data.frame("value"=c(0, 1, 2, 3, 4, 5, 6),
                     "Alpha"=c(0, 0, 0, 1, 1, 2, 2),
                     "Beta"=c(0, 0, 1, 2, 1, 0, 1),
                     "Gamma"=c(0, 1, 1, 1, 1, 1, 1))

value       Alpha     Beta     Gamma
    0           0        0         0
    1           0        0         1
    2           0        1         1
    3           1        2         1
    4           1        1         1
    5           2        0         1
    6           2        1         1         
df.alpha <- df %>% distinct(Alpha)
df.beta <- df %>% distinct(Beta)
df.gamma <- df %>% distinct(Gamma)
> df[] <- lapply(df,function(x) factor(x,levels = 0:6))
> data.frame(lapply(df,tabulate))
  Alpha Beta Gamma
1     0    0     0
2     0    0     1
3     0    1     1
4     1    2     1
5     1    1     1
6     2    0     1
7     2    1     1
df[]数据帧(lappy(df,制表)) α-β-γ 1 0 0 0 2 0 0 1 3 0 1 1 4 1 2 1 5 1 1 1 6 2 0 1 7 2 1 1
与joran的答案类似的一句话是

cbind.data.frame(values=0:6, sapply(df, function(x) table(factor(x, levels=0:6))))
这是回报

  values Alpha Beta Gamma
0      0     0    0     0
1      1     0    0     1
2      2     0    1     1
3      3     1    2     1
4      4     1    1     1
5      5     2    0     1
6      6     2    1     1

表格
替换为
表格
功能可以加快结果的速度,同时简化输出。

另一个想法是使用
tidyverse

library(dplyr)
library(purrr)

df %>%
  mutate_all(factor, levels = 0:6) %>%
  map_dfc(~ c(table(.))) %>%
  cbind(values = 0:6, .)
结果:

  values Alpha Beta Gamma
1      0     0    0     0
2      1     0    0     1
3      2     0    1     1
4      3     1    2     1
5      4     1    1     1
6      5     2    0     1
7      6     2    1     1