我试图把文本值过滤数据库表和创建的标题和小标题那里有可变的行数(通过在过滤表中每一行合并多个列上创建)一个文本报告从2其他创建表中的列。
这是发送到rmarkdown文件创建一个字或HTML文档。我曾尝试将列出并使用由()的糊状列组合在一起,但不能得到我想要的东西。
df=data.frame(cat1=c("A","A","A","B","B","C","C","C"),
cat2=c("D","D","E","D","F","D","G","G"),
text1=c("text1","text2","text3","text4","text5","text6","text7","text8"),
text2=c("text9","text10","text11","text12","text13","text14","text15","text16"))
我想是这样的:
广告:
文本1,text9
文本2,text10
答:E:
文字3,text11
B:d:
文本4,text12
B:F:
text5,text13
C:d:
text6,text14
C:G:
text7,text15
text8,文本16
我得到一些无法解析复杂的列表。
你可以得到与aggregate
和paste
T1 = aggregate(df$text1, list(df$cat1, df$cat2), paste, collapse = ", ")
T2 = aggregate(df$text2, list(df$cat1, df$cat2), paste, collapse = ", ")
T1$x = paste(T1$x, T2$x, sep=", ")
T1
Group.1 Group.2 x
1 A D text1, text2, text9, text10
2 B D text4, text12
3 C D text6, text14
4 A E text3, text11
5 B F text5, text13
6 C G text7, text8, text15, text16
这是我目前的解决方案:
for (i in unique(df$cat1)) {
cat(i,"\n")
for (j in unique(df[df$cat1==i,"cat2"])) {
cat(paste(" ",j),"\n")
for (k in df$line[df$cat1==i & df$cat2==j])
cat(paste(" ",k),"\n")
}
}
这使:
A
D
text1, text9
text2, text10
E
text3, text11
B
D
text4, text12
F
text5, text13
C
D
text6, text14
G
text7, text15
text8, text16
使用summarise
与cat
准备数据,然后循环将其打印在rmarkdown。通过在块选项使用results = "asis"
可以包括在cat
命令的格式。
```{r, results = "asis"}
library(dplyr)
newdf <- df %>%
group_by(cat1, cat2) %>%
summarise(mystring = paste(text1, text2, sep = ", ", collapse = " \n"))
for (i in 1:nrow(newdf)) {
with(newdf, cat(" \n####**", cat1[i], ": ", cat2[i], ":**", " \n\n", mystring[i], " \n", sep = "" )) }
```