R:标记数据的编码和针对html问题的编织

时间:2017-12-14 18:49:01

标签: r encoding character-encoding knitr sjplot

首先,很抱歉没有提供可重复的示例和发布图片,解释为什么我这样做是在最后。

我非常感谢一些帮助 - 评论或其他方面,我认为我尽力做到尽可能具体和简洁

我试图解决的问题是如何设置(以及在何处进行)编码,以便在将.Rmd文档编织到html后获得精简字母。

我正在处理通过spss库导入R的带标签的haven文件,并使用sjPlot工具制作表格和图表。

我已经花了几乎所有的时间试图解决这个问题,但我觉得我不知道该去哪里。

我的sessionInfo()

R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=Polish_Poland.1250  LC_CTYPE=Polish_Poland.1250    LC_MONETARY=Polish_Poland.1250
[4] LC_NUMERIC=C                   LC_TIME=Polish_Poland.1250    

每当我跑(通过控制台/脚本)

sjt.frq(df$sex, encoding = "Windows-1250")

我在rstudio查看器窗格中得到了一个包含正确编码的好表:

enter image description here

尝试不使用编码sjt.frq(df$sex)可以得到: enter image description here

每次调用sjt.frq时我都可以设置编码,但问题是,无论我如何在降价文档中设置sjt.frq,它总是以错误的方式编织

在里面运行chunk .Rmd没关系(因为一个完全未知的原因encoding = "UTF-8在这里工作得很好,而且之前没有):

enter image description here

编织同一文件,不行: (注意,html标题包含所有抛光字符) enter image description here

此外,它看起来可能是htmlsjPlot特定的,因为knitr可以在它们位于矢量中时打印抛光字母,并且如同它们打印到的那样传递控制台:

enter image description here

我可以设置/更改任何内容以使其正常工作吗?

在测试我发现的不同选项时,手动将sex变量转换为因子并再次分配标签,使用适当的编码将Rstudio编织到html

df$sex <- factor(df$sex, label = c("kobieta", "mężczyzna"))
sjt.frq(df$sex, encoding = "Windows-1250")

关于无可重现的例子:

我试图用假数据模拟这个例子:

# Get libraries
library(sjPlot)
library(sjlabelled)

x <- rep(1:4, 4)
x<- set_labels(x, labels = c("ąę", "ćŁ", "óŚŚ", "abcd"))

# Run freq table similar to df$sex above
sjt.frq(x)
sjt.frq(x, encoding = "UTF-8")
sjt.frq(x, encoding = "Windows-1250")

事情是,每个sjt.frq调用都应该按照它应该的方式编织(尽管在rstudio查看器窗格中只有encoding = "Windows-1250"正确呈现。

1 个答案:

答案 0 :(得分:3)

如果您运行sjt.frq(),则会返回一个完整的HTML页面,该页面将显示在查看器中。

但是,要在markdown / knitr文档中使用,只需要部分HTML输出:例如,您不需要<head>部分,因为knitr-document会创建自己的标题对于HTML页面。因此,针对knitr文档有一个自己的print() - 方法,它使用另一个返回值包含在knitr文件中。

比较

dummy <- sjt.frq(df$sex, encoding = "Windows-1250")
dummy$output.complete # used for default display in viewer
dummy$knitr           # used in knitr-documents

由于编码位于<meta> - 标记(未包含在$knitr - 值中),encoding - sjt.frq()中的参数对rmarkdown::render_site(encoding = 'UTF-8')没有影响knitr的文档。

认为这可能会对您有所帮助:List<double[][]> ChunkBy(double[][] x, int number){ var result = new List<double[][]>(); int chunkSize = (int)Math.Ceiling(((double)x.GetLength(0))/number); for(int i = 0; i< number; i++){ result.Add(x.Skip(chunkSize * i).Take(chunkSize).ToArray()); } return result; } 。也许还有其他选项来编码文本,或者您需要修改最终的HTML文件,在那里更改字符集编码。