我想根据名称使用正则表达式选择多个列.我正在尝试使用dplyr包的管道语法.我检查了其他主题,但只找到了关于单个字符串的答案.
基数R:
library(dplyr)
mtcars[grepl('m|ar', names(mtcars))]
### mpg am gear carb
### Mazda RX4 21.0 1 4 4
### Mazda RX4 Wag 21.0 1 4 4
Run Code Online (Sandbox Code Playgroud)
但是它不适用于select/contains方式:
mtcars %>% select(contains('m|ar'))
### data frame with 0 columns and 32 rows
Run Code Online (Sandbox Code Playgroud)
怎么了?
我想知道为什么,在中dplyr或magrittr包装,更具体的链接功能%>%有一定的麻烦与基础运营商+,-,*,和/
Chaining获取前一个语句的输出并将其作为下一个语句的第一个参数提供:
1:10 %>% sum
# [55]
Run Code Online (Sandbox Code Playgroud)
那么为什么这不起作用
1:10 %>% *2 %>% sum
1:10 %>% .*2 %>% sum
Run Code Online (Sandbox Code Playgroud)
我还发现以下语法适用于添加/减少,但不能乘法或除法.为什么这样?
1:10 %>% +(2) # works OK
1:10 %>% *(2) # nope...
Run Code Online (Sandbox Code Playgroud)
那么我应该写一个匿名函数甚至*2对我的data.frame 进行操作吗?
1:10 %>% (function(x) x*2) %>% sum
Run Code Online (Sandbox Code Playgroud)
谢谢,我在其他SO问题中找不到答案.
我有一个R-Shiny应用程序,该应用程序的图实现了交互式操作:单击,悬停(悬停将鼠标移到该图上,可以通过闪亮检测到)。为了给出一个想法,我在下面发布了一个简化的Shinyapp,它具有对我来说有问题的功能,即交互式绘图。(它是从我的一个老答案采取这里)
它实际上运行良好,但是我需要人们从智能手机上使用它。问题是:我们在智能手机中所做的手指移动被手机解释为在页面上缩放或在页面上滚动,而不是鼠标选择或情节上的鼠标移动(悬停)。
我可以在应用程序上实现将触摸事件转换为鼠标事件的代码(java?css?)的修改,还是智能手机上的选项/手势可以实现类似鼠标的移动?
非常感谢。码:
library(shiny)
ui <- fluidPage(
h4("Click on plot to start drawing, click again to pause"),
sliderInput("mywidth", "width of the pencil", min=1, max=30, step=1, value=10),
actionButton("reset", "reset"),
plotOutput("plot", width = "500px", height = "500px",
hover=hoverOpts(id = "hover", delay = 100, delayType = "throttle", clip = TRUE, nullOutside = TRUE),
click="click"))
server <- function(input, output, session) {
vals = reactiveValues(x=NULL, y=NULL)
draw = reactiveVal(FALSE)
observeEvent(input$click, handlerExpr = {
temp <- draw(); …Run Code Online (Sandbox Code Playgroud) 我正在使用一个Shiny应用程序,可能需要一些时间才能将滑块设置为正确的值.
因此,在尝试将滑块设置为正确的值(而不是释放我的鼠标左键!)时(即我的本地)服务器观察到几个新值并做出相应的反应.
由于我的服务器对任何新值的响应可能需要几秒钟,我会很高兴,如果我可以:
我正在用 Mermaid 制作序列图,我发现这个loop功能非常酷,用以下代码块在循环周围绘制一个带标签的矩形:
sequenceDiagram
loop Title
Alice->>Bob: Hello John, how are you?
Bob->>Alice: Answer
loop Title
Bob->>Bob: Thinks
end
end
Run Code Online (Sandbox Code Playgroud)
我的问题是:我可以将这个矩形容器元素用于除循环以外的其他用途吗?仅用于对事物进行分组,并将其命名为除“循环”之外的任何我想要的名称(如果我更改关键字,则它不起作用loop)。好像只有‘loop’、‘opt’和‘alt’授权关键字?
我想用颜色编码在单个图上表示数据框(或矩阵,或data.table等)的结构.我想这对于处理各种类型数据的许多人来说非常有用,可以一目了然地将其可视化.
也许有人已经开发了一个包来做它,但我找不到一个(只是这个).所以这里是我的"愿景"的粗略模型,一种热图,用颜色代码显示:

到目前为止,我刚刚编写了一个函数来绘制NA位置,如下所示:
ggSTR = function(data, alpha=0.5){
require(ggplot2)
DF <- data
if (!is.matrix(data)) DF <- as.matrix(DF)
to.plot <- cbind.data.frame('y'=rep(1:nrow(DF), each=ncol(DF)),
'x'=as.logical(t(is.na(DF)))*rep(1:ncol(DF), nrow(DF)))
size <- 20 / log( prod(dim(DF)) ) # size of point depend on size of table
g <- ggplot(data=to.plot) + aes(x,y) +
geom_point(size=size, color="red", alpha=alpha) +
scale_y_reverse() + xlim(1,ncol(DF)) +
ggtitle("location of NAs in the data frame")
pc <- round(sum(is.na(DF))/prod(dim(DF))*100, 2) # % NA
print(paste("percentage of NA data: ", pc))
return(g)
} …Run Code Online (Sandbox Code Playgroud) 我在2年前提到这个问题,用ggplot:调整stat_smooth线的透明度(alpha),而不仅仅是置信区间的透明度
建议的第一种方法允许单独设置置信区间的Alpha透明度:
ggplot(head(airquality, 60), aes(x=Day, y=Temp, color=factor(Month))) +
geom_point() + stat_smooth(method = "lm", se=TRUE, alpha=1.0)
Run Code Online (Sandbox Code Playgroud)

第二种方法允许为行本身设置alpha透明度,但在此期间你会失去置信区间,即使se=TRUE:
ggplot(head(airquality, 60), aes(x=Day, y=Temp, color=factor(Month))) +
geom_point() + geom_line(stat='smooth', method = "lm", se=TRUE, alpha=0.3)
Run Code Online (Sandbox Code Playgroud)

我的问题:如何控制平滑线和置信区间的透明度?
我有一个现有的列表:
mylist = list("player1"="Mike", "player2"="John")
Run Code Online (Sandbox Code Playgroud)
我想附加一个新元素“Sam”,其名称属性如“player17”,只不过该名称存储在变量中:
new_name="player17"
Run Code Online (Sandbox Code Playgroud)
所以我尝试不同的语法但没有成功:
c(mylist, new_name="Sam")
with(mylist, assign(new_name, "Sam"))
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以一步完成此操作(我知道我也可以使用该函数分两步更改每个元素的名称names)。
编辑:在我的真实数据中,列表的元素可以是 data.frames。
我想在向量中生成缺失值,以便将缺失值按顺序分组,以模拟不同长度的缺失数据的时段.
假设我有一个10 000个值的向量,我想在向量中的随机位置生成12个NA序列,每个序列的随机长度L在1到144之间(144个模拟在时间步长10分钟时缺失值为2天).序列不得重叠.
我怎样才能做到这一点?谢谢.
我试过结合lapply而seq没有成功.
具有3个不同序列的预期输出示例:
# 1 2 3 5 2 NA NA 5 4 6 8 9 10 11 NA NA NA NA NA NA 5 2 NA NA NA...
Run Code Online (Sandbox Code Playgroud)
编辑
我正在处理季节性时间序列,因此NA必须覆盖值而不是作为新元素插入.
我想执行Deming回归(或任何等效的回归方法,包括X和Y变量的不确定性,例如York回归).
在我的应用程序中,我有一个非常好的科学理由来故意将拦截设置为零.但是,我无法找到将其设置为零的方法,无论是在R包中deming,当我-1在公式中使用时都会出错:
df=data.frame(x=rnorm(10), y=rnorm(10), sx=runif(10), sy=runif(10))
library(deming)
deming(y~x-1, df, xstd=sy, ystd=sy)
Error in lm.wfit(x, y, wt/ystd^2) : 'x' must be a matrix
Run Code Online (Sandbox Code Playgroud)
在其他包(如mcr::mcreg或IsoplotR::york或MethComp::Deming)中,输入是两个向量x和y,因此我无法输入模型矩阵或修改公式.
你对如何实现这个有任何想法吗?谢谢.
r ×9
dplyr ×2
ggplot2 ×2
missing-data ×2
shiny ×2
append ×1
click ×1
coefficients ×1
dataframe ×1
hover ×1
list ×1
magrittr ×1
markdown ×1
matching ×1
mermaid ×1
mouseevent ×1
na ×1
piping ×1
random ×1
regex ×1
regression ×1
rename ×1
seq ×1
slider ×1
smartphone ×1
transparency ×1
vector ×1
widget ×1