如何通过两个分类列创建数据帧的文本

问题描述 投票:1回答:3

我试图把文本值过滤数据库表和创建的标题和小标题那里有可变的行数(通过在过滤表中每一行合并多个列上创建)一个文本报告从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

我得到一些无法解析复杂的列表。

r dataframe
3个回答
1
投票

你可以得到与aggregatepaste

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

0
投票

这是我目前的解决方案:

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 

0
投票

使用summarisecat准备数据,然后循环将其打印在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 = "" )) }

```

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.