我想在 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 …
在加载了几包上班了一些数据,我当我试图用函数收到一个错误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)
不过我想知道:
除了加载包时的“以下对象被屏蔽”消息之外,是否有诊断同名函数问题的最佳实践?
我的方法是dplyr::select(解决这些冲突的最佳方法吗?
最终,我当前的策略是加载具有select()我将使用更多功能的包,然后加载具有较少使用版本的包。
在编写一个旨在比较两个数据帧中的列的函数时,我希望弄清楚如何在 $ 之后引用指定为函数参数的变量。
考虑这个数据:
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)
使用后结果不正确:
有没有办法在 $ 之后砰的一声让我的功能成功?或者,是否有更好的方法来编写此函数以避免该问题?