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