小编Max*_*x M的帖子

最后一个下划线后分隔字符串

这确实是这个问题的重复 r-split-string-using-tidyrseparate,但我不能将 MWE 用于我的目的,因为我不知道如何调整正则表达式。我基本上想要同样的东西,但在最后一个下划线之后分割变量。

原因:我的数据中某些列针对相同因素/类型多次出现。我想我可以将数据在类型字符串之前将值变量分开,然后将其再次展开为具有较少列的宽格式。我的问题是我的变量名有不同的几个下划线,我想学习如何在我事先添加的最后一个下划线之后分隔。

微量元素

library(tidyr)
library(data.table)
dt<-data.table(Name=c("A","B","C"),Var_1_EVU=c(2,NA,NA),Var_1_BdS=c(NA,3,4),Var_2_BdS=c(NA,3,4))
dt.long<-melt(dt, id.vars=c("Name"))
dt.long<-separate(dt.long,variable, c("test","type"), sep='/[^_]*$/')
dt.wide<-spread(dt.long,key=Name,value=value) 
Run Code Online (Sandbox Code Playgroud)

我想要类似的东西

   Name type Var1 Var2
1:    A  BdS   NA   NA
2:    A  EVU    2   NA
3:    B  BdS    3    3
4:    B  EVU   NA   NA
5:    C  BdS    4    4
6:    C  EVU   NA   NA
Run Code Online (Sandbox Code Playgroud)

r melt data.table tidyr tidyverse

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

数据表 lapply 和输出中的附加列

我只是希望有更方便的方法。成像我想运行一个模型,对某些列进行不同的转换,例如缩尾。我想向模型提供转换后的数据集以及一些不需要转换的附加列。有没有一种实用的方法可以在一行中实现这一点?我不想使用替换数据,:=因为我计划使用不同的转换规范来运行模型。

dt<-data.table(id=1:10, Country=sample(c("Germany", "USA"),10, replace=TRUE), x=rnorm(10,1,10),y=rnorm(10,1,10),factor=factor(sample(LETTERS[1:2],10,replace=TRUE)))
sel.col<-c("x","y")
dt[,lapply(.SD,Winsorize),.SDcols=sel.col,by=factor]
Run Code Online (Sandbox Code Playgroud)

我需要再次调用 data.table 将原始 dt 与转换后的数据合并并注意顺序。

data.table(dt[,.(id,Country),by=factor],
           dt[,lapply(.SD,Winsorize),.SDcols=sel.col,by=factor])
Run Code Online (Sandbox Code Playgroud)

我希望我可以在 lapply 调用中包含附加列

dt[,.(lapply(.SD,Winsorize), id, Country),.SDcols=sel.col,by=factor]
Run Code Online (Sandbox Code Playgroud)

还有其他解决方案吗?

r lapply data.table

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

自定义按钮扩展名下载的文件名

对于提出所有这些基本问题我感到有点傻,但我找不到任何相关内容.我想让我的用户在点击我的表格的'excel'按钮时命名该文件.下载对话框打开,或者弹出另一个用户界面,可以输入名称.那可能吗?现在,名称等于应用程序的标记.

rm(list=ls()) 
library(shiny)
library(datasets)
library(DT)
library(data.table)
DT<-data.table(matrix(abs(rnorm(600*40,sd=100)),nrow=600))

server<-shinyServer(function(input, output) {
  output$view <- DT::renderDataTable(
    DT[,.SD],extensions = c( 'FixedHeader','Buttons'),
      options=list(pageLength=60,fixedHeader = TRUE,dom = 'Bfrtip',buttons = c( 'csv', 'excel'  )))
}) 

ui<-shinyUI(fluidPage(
  titlePanel("Shiny MWE"),
        DT::dataTableOutput("view")
    ))

runApp(list(ui=ui,server=server))
Run Code Online (Sandbox Code Playgroud)

r shiny dt

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

Openxlsx 保护工作表但允许输入值

我正在使用 Excel 模板从不同的人那里收集数据。为了最大限度地减少人们更改模板结构的机会,我想保护工作表,但仍然允许他们填写我想要的数据值。

我很高兴我找到了 openxlsx 包的分叉版本,其中包含protectWorksheet执行此操作的函数Link。但是当我使用该函数时,我无法调整该函数以便仍然可以填充值。

除了帮助文件中示例中的功能之外,我实际上没有 MWE 。如何调整示例以仍然允许填写值?是否可以?

wb <- createWorkbook()
addWorksheet(wb, "S1")
writeDataTable(wb, 1, x = iris[1:30,])
# Formatting cells / columns is allowed , but inserting / deleting columns is protected:
protectWorksheet(wb, "S1", protect = TRUE, lockFormattingCells = FALSE, lockFormattingColumns = FALSE, lockInsertingColumns = TRUE, lockDeletingColumns = TRUE)

saveWorkbook(wb, "pageSetupExample.xlsx", overwrite = TRUE)
Run Code Online (Sandbox Code Playgroud)

excel r openxlsx

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

对齐数值精度Excel 2013和R.

这是一个相当广泛的问题,但我在R. R中复制了一个Excel模型,产生了与excel几乎相同的结果,但是在10 ^ -8的范围内总是存在轻微的%偏差.我认为这是由于数值精度.该模型仅使用基本算术运算.我的问题是:有一种简单的方法可以强制R使用与Excel相同的数值精度吗?

excel r

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

标签 统计

r ×5

data.table ×2

excel ×2

dt ×1

lapply ×1

melt ×1

openxlsx ×1

shiny ×1

tidyr ×1

tidyverse ×1