Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中简单快速地生成表?_R - Fatal编程技术网

如何在R中简单快速地生成表?

如何在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[,

我不是要求使用str()或scape()命令,而是要求使用更好的方法生成表

假设我想看看我的背景变量(Gymsiegrov)是否会影响我的结果变量(totstatus_bin)

然后我写

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)