小编Pak*_*ake的帖子

如何将表格添加到我的 rmarkdown html 输出中,该表格将使用格式粘贴到 Excel 中?

我想在 rmarkdown 文件中创建按钮(或可选择的表格),允许用户复制表格并将其粘贴到具有一些预定义格式的 word 或 excel 中。

有没有办法产生:

  • 保留表格格式的复制功能,尤其是单元格的边框
  • 捕获整个表的复制功能

使用这个非常简单的数据框:

data<-data.frame(Variable=c('Amount','Age','Happiness','Favorite Color'),
             Value=c(15,25,7,'Yellow'))
Run Code Online (Sandbox Code Playgroud)

我希望用户能够单击 html 文件中的按钮,以便当他们粘贴到 excel 或 word 中时,他们会看到:

在此处输入图片说明

或者

在此处输入图片说明

取决于指定的格式。

就目前而言,我可以制作一个带有单元格边框的表格kable

data%>%
  kable("html",align = 'clc')%>%
  kable_styling(full_width = F,position="left",bootstrap_options = 
  c("striped","bordered"))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明 这个表格,在使用 rmarkdown 生成的 html 文件中,显示单元格边框,并且具有可接受的间距和清晰度(列的宽度足以显示完整的列标题,网格清楚地定义了单元格。

当我突出显示表格并将其粘贴到 Excel 中时,我得到:

在此处输入图片说明

一个不满意的结果。

生成一个表DT,我使用:

datatable(data,extensions='Buttons',rownames=FALSE,filter=c("top"),options=list(dom='Bfrtip',buttons=c('csv','copy','excel')))
Run Code Online (Sandbox Code Playgroud)

这将生成一个带有 CSV、复制和 Excel 按钮的表格。

使用复制按钮并粘贴到 Excel 的结果是:

在此处输入图片说明

用户有可以粘贴的数据,但没有任何格式(并将文件中的标题放在数据表本身上方两行?)

有没有办法修改DT表格的“复制”按钮的代码以包含一些指定的格式,例如缺少的参数,它提供了将一些格式复制到剪贴板的选项?或者一种生成独立按钮的方法,我可以在后面存储一个 excel 格式的表格,以便用户可以以一种 excel 友好的格式格式复制我的表格?

注意:我不想从 R 写入 excel 文件。 似乎有很多选项可以用于格式化表格和写入 Excelopenxlsx以及这里的解决方案:Write from R into template in excel while …

javascript r r-markdown

6
推荐指数
1
解决办法
732
查看次数

解决 R 中函数名冲突的最佳方法是什么?

在加载了几包上班了一些数据,我当我试图用函数收到一个错误select()dplyr包。我试图使用一个新包(对我来说)MASS,所以我很容易能够诊断并让事情正常工作。然而,这种经历让我很好奇,在一个包含多个包、功能相互冲突的世界中,最佳工作方式是什么。

考虑以下代码和错误消息:

library(dplyr)
library(MASS)


df<-data.frame(Lobsters=c(1,3,4,5,7,1),Llamas=c(7,1,2,5,8,3))

df2<-df%>%
  select(Lobsters)
Run Code Online (Sandbox Code Playgroud)

select(.,Lobsters) 中的错误:未使用的参数(龙虾)

虽然这个错误清楚地表明 select() 给了我这个问题,但它并不一定让我清楚问题是我没有调用select()我习惯的函数。

我知道我可以调用该dplyr函数并使用以下方法获得我想要的结果:

df2_alt<-df%>%
  dplyr::select(Lobsters)
Run Code Online (Sandbox Code Playgroud)

不过我想知道:

  1. 除了加载包时的“以下对象被屏蔽”消息之外,是否有诊断同名函数问题的最佳实践?

  2. 我的方法是dplyr::select(解决这些冲突的最佳方法吗?

最终,我当前的策略是加载具有select()我将使用更多功能的包,然后加载具有较少使用版本的包。

r

4
推荐指数
1
解决办法
297
查看次数

在 $ 之后我怎样才能 Bang Bang?

在编写一个旨在比较两个数据帧中的列的函数时,我希望弄清楚如何在 $ 之后引用指定为函数参数的变量。

考虑这个数据:

data1<-data.frame(ID=c(1,1,2,2,3,3),Amt=c(5,10,15,20,25,30),Term=c(2,3,2,3,2,3))
data2<-data.frame(Id=c(1,2,3),TERM=c(1,2,3))
Run Code Online (Sandbox Code Playgroud)

这个失败的功能:

two_df_function<-function(df,df2,id,id2,term,term2){

  id<-rlang::ensym(id)
  id2<-rlang::ensym(id2)
  term<-rlang::ensym(term)
  term2<-rlang::ensym(term2)

  data_out<-df%>%
    group_by(!!term)%>%
    mutate(Early=ifelse(!!id %in% df2$!!id2[df2$!!term2 < !!term],1,0))
}
Run Code Online (Sandbox Code Playgroud)

我收到“错误:意外的‘!’ 在:”

为了得到我想要的结果,我手动插入了数据框和列名:

data_out<-data1%>%
  group_by(Term)%>%
  mutate(Early=ifelse(ID %in% data2$Id[data2$TERM < Term],1,0))
Run Code Online (Sandbox Code Playgroud)

产生:

在此处输入图片说明

因为我想要一个函数,所以我尝试通过简单地取出意外符号来解决。

以下将运行,但给出不正确的结果:

two_df_function<-function(df,df2,id,id2,term,term2){

  id<-rlang::ensym(id)
  id2<-rlang::ensym(id2)
  term<-rlang::ensym(term)
  term2<-rlang::ensym(term2)


  data_out<-df%>%
    group_by(!!term)%>%
    mutate(Early=ifelse(!!id %in% df2$id2[df2$term2 < !!term],1,0))

  return(data_out)

}
Run Code Online (Sandbox Code Playgroud)

使用后结果不正确:

在此处输入图片说明

有没有办法在 $ 之后砰的一声让我的功能成功?或者,是否有更好的方法来编写此函数以避免该问题?

r dplyr tidyr

1
推荐指数
1
解决办法
115
查看次数

标签 统计

r ×3

dplyr ×1

javascript ×1

r-markdown ×1

tidyr ×1