如何在R中简单快速地生成表?
我不是要求使用str()或scape()命令,而是要求使用更好的方法生成表 假设我想看看我的背景变量(Gymsiegrov)是否会影响我的结果变量(totstatus_bin) 然后我写如何在R中简单快速地生成表?,r,R,我不是要求使用str()或scape()命令,而是要求使用更好的方法生成表 假设我想看看我的背景变量(Gymsiegrov)是否会影响我的结果变量(totstatus_bin) 然后我写 vettig_tabell<-table(fulldata$gymnasiegrov,fulldata$totstatus_bin) 使用data.table,您可以执行以下操作(假设我正确理解您): 代码 require(data.table); dt = setDT(fulldata) dt[,
vettig_tabell<-table(fulldata$gymnasiegrov,fulldata$totstatus_bin)
使用data.table
,您可以执行以下操作(假设我正确理解您):
代码
require(data.table); dt = setDT(fulldata)
dt[, Pågående := fifelse(totstatus_bin == 'pågående studier', 1, 0)]
freq_table = dt[, .(Frekvens_Pågående = mean(Pågående)), keyby = gymnasiegrov]
或者,您可以绕过虚拟阶段,如@jangorecki所示:
require(data.table); dt = setDT(fulldata)
dt[, .(Frekvens_Pågående = mean(totstatus_bin == 'pågående studier')), keyby = gymnasiegrov]
结果
> freq_table
gymnasiegrov Frekvens_Pågående
1: <NA> 0.7272727
2: Handels- och administrationsprogrammet 0.7500000
3: Hotell- och Restaurang 0.3333333
4: bygg, el, fordon, hantverk, sjöfart, industriteknik 0.7000000
5: ekonomiprogrammet/ ekonomi 0.6181818
6: ekonomiprogrammet/ juridik 0.7000000
7: estetiska programmet 0.7142857
8: friskoleprogram 1.0000000
9: komvux 0.3333333
10: medieprogrammet/medieproduktion 0.0000000
11: naturvetenskapliga programmet 0.6428571
12: samhälls- och ekonomiprogrammet 1.0000000
13: samhällsvetenskapliga programmet 0.6875000
14: specialutformat program 0.5454545
15: teknikprogrammet 0.4545455
>频率表
格里斯格洛夫·弗雷克文斯普·格文德体育馆
1: 0.7272727
2:Handels-och管理计划达到0.7500000
3:酒店-och餐厅0.3333
4:bygg、el、fordon、hantverk、sjöfart、Industritecknik 0.7000000
5:ekonomiprogrammet/ekonomi 0.6181818
6:Ekonomiprogramet/juridik 0.7000000
7:estetiska计划0.7142857
8:friskoleprogram 1.0000000
9:komvux 0.3333
10:medieprogrammet/MedieProducation 0.0000000
11:naturvetenskapliga项目0.6428571
12:samhälls-och Ekonomipmprogrammet 1.0000000
13:samhällsvetenskapliga项目0.6875000
14:特殊格式程序0.545
15:teknikprogrammet 0.455
嘿,你也可以试试简单的base R:
tab = do.call(rbind,
tapply(fulldata$totstatus_bin,fulldata$gymnasiegrov,table)
)
# calculate the ratio you wanted
tab = data.frame(tab)
tab$ongoing = tab[,1]/rowSums(tab)
这里有一个基于tidyverse的选项。它还可以正确处理
Gymsiegrov
中缺少的值,而不仅仅是删除它们:
库(tidyverse)
fulldata%>%
分组依据所有()%>%
计数%>%
排列(总状态,n,填充=0)%>%
突变(进行中=`pågående studier`/(`pågående studier`+`troligt avbrott elleråterbud`)
输出:
# A tibble: 15 x 4
# Groups: gymnasiegrov [15]
gymnasiegrov `pågående studie… `troligt avbrott el… ongoing
<chr> <dbl> <dbl> <dbl>
1 bygg, el, fordon, hantv… 7 3 0.7
2 ekonomiprogrammet/ ekon… 34 21 0.618
3 ekonomiprogrammet/ juri… 7 3 0.7
4 estetiska programmet 5 2 0.714
5 friskoleprogram 2 0 1
6 Handels- och administra… 3 1 0.75
7 Hotell- och Restaurang 1 2 0.333
8 komvux 2 4 0.333
9 medieprogrammet/mediepr… 0 1 0
10 naturvetenskapliga prog… 9 5 0.643
11 samhälls- och ekonomipr… 1 0 1
12 samhällsvetenskapliga p… 11 5 0.688
13 specialutformat program 6 5 0.545
14 teknikprogrammet 5 6 0.455
15 NA 8 3 0.727
#一个tible:15 x 4
#组别:葛林赛格罗夫[15]
Gymsiegrov'pågående studie…'troligt avbrott el…正在进行中
1比格,埃尔,福特,汉坦…7 3 0.7
2 ekonomiprogramet/ekon…34 21 0.618
3 ekonomiprogramet/juri…7 3 0.7
4 estetiska计划5 2 0.714
5 friskoleprogram 2 0 1
6韩德尔-人道协调厅行政部门…3 1 0.75
7酒店-och餐厅120.333
8 komvux 2 4 0.333
9 medieprogrammet/mediepr…0 1 0
10自然疗法进展…9 5 0.643
11 samhälls-och ekonomipr…10 1
12 samhällsvetenskapliga p....11 5 0.688
13特殊格式程序6 5 0.545
14 Teknik项目5 6 0.455
15 NA 83 0.727
这将生成一个看起来像表的数据帧,而无需转换为长格式并返回。没有使用任何软件包
as.data.frame.matrix(table(fulldata))
同样,要获得平均值:
as.data.frame.matrix(prop.table(table(fulldata), 1))
这将得到问题中显示的最终数据帧:
tab <- table(fulldata)
transform(as.data.frame.matrix(tab), ongoing = prop.table(tab, 1)[, 1])
2)数据表::dcast
> freq_table
gymnasiegrov Frekvens_Pågående
1: <NA> 0.7272727
2: Handels- och administrationsprogrammet 0.7500000
3: Hotell- och Restaurang 0.3333333
4: bygg, el, fordon, hantverk, sjöfart, industriteknik 0.7000000
5: ekonomiprogrammet/ ekonomi 0.6181818
6: ekonomiprogrammet/ juridik 0.7000000
7: estetiska programmet 0.7142857
8: friskoleprogram 1.0000000
9: komvux 0.3333333
10: medieprogrammet/medieproduktion 0.0000000
11: naturvetenskapliga programmet 0.6428571
12: samhälls- och ekonomiprogrammet 1.0000000
13: samhällsvetenskapliga programmet 0.6875000
14: specialutformat program 0.5454545
15: teknikprogrammet 0.4545455
对于频率表,这将生成data.frame。重塑2包还有一个dcast
,与相同的参数一起使用
library(data.table)
dcast(fulldata, gymnasiegrov ~ totstatus_bin)
你能分享一些(可复制的)数据和预期输出吗?这不是一个很好的问题。有点不清楚您对表的确切理解是什么,因为您不共享数据,所以很难理解符合条件的内容。另外:如果您认为代码太冗长,您可以创建自己的函数。有些人甚至用他们经常使用的代码来创建他们的个人R包:不会工作吗?
dt[,(Frekvens_Pågående=mean(totstatus_bin==“Pågående studier”)),keyby=gysiegrov]
只是工作吗?有fidelse
这是ifelse
的更快版本。应以信用证形式进行修改(同时,感谢您提供fifelse
!)。您能否解释一下“道具表(表1)”中的“1”代码的含义?我知道它在某种程度上被用来编码组内百分比,但我尽我所能去理解我正在使用的代码!1表示将每个单元格除以其所属行的行总数。(2表示除以各列总和)例如,表格(fulldata)
的第一行为7,3,因此总和为7+3=10,除以该行得到0.7,0.3。见?道具表
as.data.frame.matrix(prop.table(table(fulldata), 1))
tab <- table(fulldata)
transform(as.data.frame.matrix(tab), ongoing = prop.table(tab, 1)[, 1])
library(janitor)
tabyl(fulldata, gymnasiegrov, totstatus_bin)
library(data.table)
dcast(fulldata, gymnasiegrov ~ totstatus_bin)