R语言 自动更新单词表

laawzig2  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(117)

我想使用R自动更新Word中的表。我在R中有一个 Dataframe ,其中包含两列“E1”和“E2”,它们的值从A到F。

E1<- c("F","B","C","A","B","A","A","A","D","E","F")
E2 <- c("A","F","C","A","B","B","B","D","E","D","D")
data<-data.frame(E1,E2)

我想在R中创建一个表,如下所示:E1和E2下面的列应该被分成两列“值”和“占总数的百分比”。对于每列(E1,E2),我想统计每个字母的频率,然后是占字母总数的百分比。Sum =所有字母的总和(因此所有行)
| | E1|第二代|
| - ------|- ------|- ------|
| A类|价值/和占总数的百分比|价值/和占总数的百分比|
| B|价值/和占总数的百分比|价值/和占总数的百分比|
| C级|价值/和占总数的百分比|价值/和占总数的百分比|
| D级|价值/和占总数的百分比|价值/和占总数的百分比|
| E级|价值/和占总数的百分比|价值/和占总数的百分比|
| F级|价值/和占总数的百分比|价值/和占总数的百分比|
| 总和|价值|价值|
这个表应该是word文件的输出,如果我在R Dataframe 中做了任何更改,它应该会自动更新。

vcirk6k6

vcirk6k61#

使用dplyr

tmp <- data %>%
  pivot_longer(everything(), values_to = "ltr") %>%
  count(name, ltr) %>%
  group_by(name) %>%
  mutate(pct = n / sum(n), txt = sprintf("n=%i (%0.01f%%)", n, 100 * pct)) %>%
  ungroup()
tmp
# # A tibble: 12 × 5
#    name  ltr       n    pct txt        
#    <chr> <chr> <int>  <dbl> <chr>      
#  1 E1    A         4 0.364  n=4 (36.4%)
#  2 E1    B         2 0.182  n=2 (18.2%)
#  3 E1    C         1 0.0909 n=1 (9.1%) 
#  4 E1    D         1 0.0909 n=1 (9.1%) 
#  5 E1    E         1 0.0909 n=1 (9.1%) 
#  6 E1    F         2 0.182  n=2 (18.2%)
#  7 E2    A         2 0.182  n=2 (18.2%)
#  8 E2    B         3 0.273  n=3 (27.3%)
#  9 E2    C         1 0.0909 n=1 (9.1%) 
# 10 E2    D         3 0.273  n=3 (27.3%)
# 11 E2    E         1 0.0909 n=1 (9.1%) 
# 12 E2    F         1 0.0909 n=1 (9.1%) 

out <- tmp %>%
  group_by(name) %>%
  summarize(ltr = "sum", txt = sprintf("n=%i", sum(n))) %>%
  bind_rows(tmp, .) %>%
  pivot_wider(ltr, names_from = name, values_from = txt)
out
# # A tibble: 7 × 3
#   ltr   E1          E2         
#   <chr> <chr>       <chr>      
# 1 A     n=4 (36.4%) n=2 (18.2%)
# 2 B     n=2 (18.2%) n=3 (27.3%)
# 3 C     n=1 (9.1%)  n=1 (9.1%) 
# 4 D     n=1 (9.1%)  n=3 (27.3%)
# 5 E     n=1 (9.1%)  n=1 (9.1%) 
# 6 F     n=2 (18.2%) n=1 (9.1%) 
# 7 sum   n=11        n=11

从这里,移动到Word(docx)表的一种方法是:创建一个简单的rmarkdown文档(我将其命名为"quux.Rmd"),只需要:

---
params:
  data: ""
output: word_document
---

```{r, echo=FALSE}
knitr::kable(params$data, format = "pipe", col.names = c("", names(params$data)[-1]))

那就打电话

rmarkdown::render("quux.Rmd", params=list(data=out), output_file="quux.docx")


看看Word中的`"quux.docx"`,我们会看到

![](https://i.stack.imgur.com/QXbRk.png)

现在,您可以将该表复制/粘贴到实际("永久")docx文件中。(无法呈现到现有文档中:复制/粘贴它,或者将当前docx转换为R-markdown文档并正常呈现它。)
有许多选项可以用来格式化表格,使其具有更多的控制权,这超出了这个问题的范围。请看`stargazer`、`kableExtra`和`pander`这三个选项。

相关问题