小编Kon*_*rad的帖子

R返回行名称的部分匹配

我遇到了以下问题

vec <- c("a11","b21","c31")
df <- data.frame(a = c(0,0,0), b = c(1,1,1), row.names = vec)
df["a",]
Run Code Online (Sandbox Code Playgroud)

回报

df["a",]
    a b
a11 0 1
Run Code Online (Sandbox Code Playgroud)

然而,

"a" %in% vec 
Run Code Online (Sandbox Code Playgroud)

"a" %in% rownames(df) 
Run Code Online (Sandbox Code Playgroud)

两者都返回False

当使用字母后跟行号的数字时,R允许字符串的部分匹配.我已经在R v3.2.2和R v3.2.1上复制了这个.甚至

df[["a",1,exact=T]]
Run Code Online (Sandbox Code Playgroud)

返回0

有什么我可以设置,以便R不允许这种部分匹配?

r matching dataframe rowname

7
推荐指数
2
解决办法
1410
查看次数

闪亮的范围规则 - 在模块化架构中加载库的位置

有了这个问题,我只对在使用Shiny应用程序时使用软件包的最佳方法有所了解.尽管与提出与R相关的问题的良好做法相反,这个问题不包含代码或可重复的例子,但我希望它涉及实际和相关的问题.

问题

我正在开发一个具有以下结构的模块化 Shiny应用程序:

  • server.R - 包含一些关键功能和前几个初始图形
  • ui.R - 提供基本的用户界面框架
  • data - 包含一些动态源数据文件的文件夹
    • list.csv - 包含数据的示例文件
    • ... - 其他数据文件
  • functionsAndModules- 包含*.R与功能和模块有关的文件的文件 夹
    • functionCleanGeo.R - 简单的功能清理一些格式的数据帧: cleanDataFrame <- function(data) { ... return(cleanDta) }
    • moduleTimeSeries.R - 提供时间序列分析的模块,执行以下操作:
      • 生成用户界面
      • 采购数据
      • 生成图表
    • ...R- 保存为*.R文件的其他模块和功能.

图书馆

我想知道的是如何处理对于上面概述的app结构最佳的加载包.特别是,我想知道:

  1. 在in global.R和when(如果有的话)加载库就足够了,可能需要在模块文件和/或server.R/ ui.r?之间加载库.

    1.2.对于使用时例如shinyTree包我在加载server.Rui.R为,这是我的理解,这从实施例流动.模块和功能使用dplyr/ tidyr组合,是否足以加载这些包global.R

  2. 我首选的加载包的方法看起来如下: Vectorize(require)(package = c("ggvis", "SPARQL", "jsonlite", …

module r package shiny

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

在vim可视模式下移动多行

按下v并进入视觉模式后,我想将这些行向上移动几行.这里讨论的解决方案不适合我,因为我想在视觉上移动线条,即我不想输入+ 因为我不知道它的价值.是否有键盘快捷键允许我通过按键序列在视觉模式下向下或向上移动一行所选行?m:nn

选定行的样本

vim text text-editor vim-plugin

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

在dplyr中使用mutate_all格式化所有列

我正在寻找使用内部格式化表格.scales::dollar mutate_all

期望的结果

使用以下方法可以获得所需的结果sapply:

>> sapply(mtcars, scales::dollar)
      mpg      cyl  disp      hp     drat    wt      qsec     vs   am   gear carb
 [1,] "$21.00" "$6" "$160.00" "$110" "$3.90" "$2.62" "$16.46" "$0" "$1" "$4" "$4"
 [2,] "$21.00" "$6" "$160.00" "$110" "$3.90" "$2.88" "$17.02" "$0" "$1" "$4" "$4"
 [3,] "$22.80" "$4" "$108.00" "$93"  "$3.85" "$2.32" "$18.61" "$1" "$1" "$4" "$1"
 [4,] "$21.40" "$6" "$258.00" "$110" "$3.08" "$3.22" "$19.44" "$1" "$0" "$3" "$1"
Run Code Online (Sandbox Code Playgroud)

挑战

试图通过实现相同的结果dplyr管道 scales::dollar:

mtcars %>% …
Run Code Online (Sandbox Code Playgroud)

string formatting r dplyr

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

根据外部价值有条件地应用管道步骤

鉴于dplyr工作流程:

require(dplyr)                                      
mtcars %>% 
    tibble::rownames_to_column(var = "model") %>% 
    filter(grepl(x = model, pattern = "Merc")) %>% 
    group_by(am) %>% 
    summarise(meanMPG = mean(mpg))
Run Code Online (Sandbox Code Playgroud)

我有兴趣filter根据价值有条件地申请applyFilter.

对于applyFilter <- 1使用"Merc"字符串过滤行,而不使用过滤器返回所有行.

applyFilter <- 1


mtcars %>%
  tibble::rownames_to_column(var = "model") %>%
  filter(model %in%
           if (applyFilter) {
             rownames(mtcars)[grepl(x = rownames(mtcars), pattern = "Merc")]
           } else
           {
             rownames(mtcars)
           }) %>%
  group_by(am) %>%
  summarise(meanMPG = mean(mpg))
Run Code Online (Sandbox Code Playgroud)

问题

建议的解决方案效率低,因为ifelse始终会评估调用; 更可取的方法只会评估filter步骤applyFilter <- 1.

尝试

低效的 …

workflow conditional pipeline r dplyr

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

应用于带有facet_wrap的箱形图时,删除一个tableGrob

我正在使用下面的代码来丰富一个箱形图,其中包含在x轴上创建的分类变量的汇总表.

# Libs
require(ggplot2); require(gridExtra); require(grid); require(ggthemes)

# Data
data(mtcars)

# Function to summarise the data
fun_dta_sum <- function(var_sum, group, data) {
    sum_dta <- data.frame(
        aggregate(var_sum ~ group, FUN = min, data = data),
        aggregate(var_sum ~ group, FUN = max, data = data),
        aggregate(var_sum ~ group, FUN = mean, data = data))

    sum_dta <- sum_dta[,c(1,2,4,6)]
    colnames(sum_dta) <- c("Group (x axis)", "min", "max", "mean")
    rownames(sum_dta) <- NULL
    sum_dta[,-1] <-round(sum_dta[,-1],1)
    return(sum_dta)

}

# Graph
ggplot(data = mtcars, aes(x = cyl, y = …
Run Code Online (Sandbox Code Playgroud)

charts r ggplot2 boxplot gridextra

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

通过表达式生成时如何在ggplot2中对齐标题和副标题

我正在使用下面的代码生成一个简单的箱线图ggplot2

# Libs data
data("mtcars"); require(ggplot2); require(ggthemes)
# Chart
ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)),
               fill = "gray87") +
  xlab("AM") +
  ylab("WT") +
  theme_gdocs() +
  ggtitle("WT by AM") +
  theme(axis.title.y = element_text(angle = 90),
        axis.ticks = element_line(colour = "black", linetype = "solid",
                                  size = 0.5),
        panel.grid = element_line(colour = "gray"))
Run Code Online (Sandbox Code Playgroud)

生成的图表相当简单: 第一张图表

任务

我想为我的图表添加一个副标题,并对它的呈现方式进行一些控制。我正在关注此讨论并使用代码:

# Chart
ggplot(data = mtcars) +
  geom_boxplot(aes(y = wt, x = as.factor(am)),
               fill = "gray87") +
  xlab("AM") +
  ylab("WT") …
Run Code Online (Sandbox Code Playgroud)

charts r ggplot2 boxplot plotmath

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

匹配gsub/r中的last和first括号,并保留其余内容

我正在使用以下格式的字符向量:

[-0.2122,-0.1213)
[-0.2750,-0.2122)
[-0.1213,-0.0222)
[-0.1213,-0.0222)
Run Code Online (Sandbox Code Playgroud)

我想删除[,)所以我可以获得所需的结果:

-0.2122,-0.1213
-0.2750,-0.2122
-0.1213,-0.0222
-0.1213,-0.0222
Run Code Online (Sandbox Code Playgroud)

尝试

1 - 团体,

我想在语法的路线上捕获第一组和第二组:

[[^\[{1}(?![[:digit:]])\){1}
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用,(regex101).

2 - 标点符号

代码:[[:punct:]]将捕获所有标点符号regex101.

比赛

3 - 再次组

然后我尝试匹配这两组:(\[)(\))但是,再次,不缺乏regex101.


通过应用gsub两次或使用包中的multigsub可用性可以很容易地解决问题,qdap但我有兴趣通过一个表达式来解决这个问题.

regex replace r punctuation gsub

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

在线性模型中结合cbind和paste

我想知道如何能够提出一种lm公式语法,使我能够pastecbind多元多元回归一起使用.

在我的模型中,我有一组变量,它们对应于下面的原始示例:

data(mtcars)
depVars <- paste("mpg", "disp")
indepVars <- paste("qsec", "wt", "drat")
Run Code Online (Sandbox Code Playgroud)

问题

我想用我depVars和我创建一个模型indepVars.手动输入的模型看起来像这样:

modExmple <- lm(formula = cbind(mpg, disp) ~ qsec + wt + drat, data = mtcars)
Run Code Online (Sandbox Code Playgroud)

我有兴趣生成相同的公式,而不引用变量名称,只使用上面定义的depVarsindepVars向量.


尝试1

例如,我的想法将对应于:

mod1 <- lm(formula = formula(paste(cbind(paste(depVars, collapse = ",")), " ~ ",
                                   indepVars)), data = mtcars)
Run Code Online (Sandbox Code Playgroud)

尝试2

我也尝试过这个:

mod2 <- lm(formula = formula(cbind(depVars), paste(" ~ ",
                                                   paste(indepVars, 
                                                         collapse = " + "))),
           data = …
Run Code Online (Sandbox Code Playgroud)

string r formula lm cbind

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

通过每个组的嵌套数据内的交叉应用简单函数

背景

\n\n

给定嵌套数据,我想对across任意选择的列应用一个简单的函数。使用across我想迭代传递给函数一个参数的列的选择,并保持第二个参数不变。

\n\n
\n\n

例子

\n\n
# Using across within nested data frame\n\n# Gapminder data from gapminder package\nlibrary("tidyverse")\ndata("gapminder", package = "gapminder")\n\n# Sample function\nsample_function <- function(.data, var_a, var_b) {\n    var_a <- enquo(var_a)\n    var_b <- enquo(var_b)\n    .data %>%\n        mutate(some_res = log(!!var_a) + !!var_b) %>%\n        pull(some_res)\n}\n\n\n# Basic example, not working\ngapminder %>%\n    group_by(country, continent) %>%\n    nest() %>%\n    mutate(sample_res = map(\n        .x = data,\n        .f = across(\n            .cols = vars(year, lifeExp, pop),\n            .fns = ~ sample_function(var_a = .x),\n …
Run Code Online (Sandbox Code Playgroud)

nested r dplyr tibble

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