小编r.u*_*apr的帖子

用 mutate 替换部分字符串(在管道中)

我想替换字符串的一部分(在前 2 个下划线之间,第一组始终为“i”),如下面的基本 R 示例所示:

library(dplyr)
library(stringr)

d <- tibble(txt = c("i_0000_GES", "i_0000_OISO", "i_0000_ASE1333"),
            repl = c("1111", "1111", "2222"))

str_sub(d$txt, 3, 6) <- d$repl
d

# A tibble: 3 x 2
# txt            repl 
# <chr>          <chr>
# 1 i_1111_GES     1111 
# 2 i_1111_OISO    1111 
# 3 i_2222_ASE1333 2222  
Run Code Online (Sandbox Code Playgroud)

我如何使用str_sub<-或其他字符串函数来做到这一点?

r stringr dplyr tidyverse

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

为 geom_area() 定义不同于零的起始值

我想将 geom_area() 的起始 y 级别从零移开。这是在下面的例子中,第一个函数调用没问题,但我怎样才能纠正第二个调用的情节:

library(ggplot2)

set.seed(123)

myplot <- function (split.value) {
  year <- (2000:2017)
  index <- rnorm(18, split.value,5)
  interp <- approx(year, index, n=1000)
  df <- data.frame(year = interp$x,
                   index = interp$y,
                   valence = ifelse(interp$y <= split.value, "pos", "neg"),
                   stringsAsFactors = FALSE)
  ggplot(df, aes(x = year, y = index)) +
    geom_area(aes(fill = valence), alpha = 0.5) +
    geom_line() +
    geom_hline(yintercept = split.value) +
    scale_fill_manual(values=c("green", "red"), guide=FALSE) +
    scale_x_continuous(expand=c(0, 0))
} # cf. R Graphics Cookbook

myplot(0) # o.k. (with more …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

在循环遍历tibble列时获取map-loop-element的名称

我想在使用map循环时提取当前列的列名.例如,如果有一些变量,我想取消缩放:

library(tidyverse)
d <- tibble(a = runif(10), b = runif(10), c = runif(10))
l <- list(a = list(min = -19, max = 20), b = list(min = 22, max = 55), c = list(min = 80, max = 120))
restore <- function(x, r) x * (r$max - r$min) + r$min
my_cols <- c("a", "c")
d %>%
  select(!!!my_cols) %>%
  map(~restore(.x, l[[name(.x)]]))
# Error in name(.x) : could not find function "name"
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

r dplyr purrr tidyverse

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

在 dplyr 中选择带有特殊字符的名称

如何使用 dplyr::select 而不是使用列索引取消选择名为“(Intercept)”的列?

library(dplyr)
library(tibble)

tib<-tribble(~"(Intercept)",~b,
              80,3,
              80,4,
              80,4)

tib[,-1] # works

select(tib,eval(parse(("-(Intercept)")))) # does not work
select(tib,as.name(("-(Intercept)"))) # does not work 
select(tib,-"\(Intercept\)") # does not work
Run Code Online (Sandbox Code Playgroud)

谢谢&亲切的问候

r dplyr

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

使用Reduce调用函数列表

我想在向量上使用过滤器列表.我的问题是,filter_list在这个例子中,我如何使用Reduce(或其他基本R标准函数)来执行递归函数正在做的事情(=应用所有函数和逻辑AND连接):

my_vec <- c("AAffff1", "AAafszx223", "AAasfe2XX", "uuse3", "AA232fiserf", "ffse1211", "766", "AA33")

filter_list <- list(
  f_1 = function(x) {substr(x, 1, 2) == "AA"},
  f_2 = function(x) {grepl("\\d{3,}", x)},
  f_3 = function(x) {nchar(x) >= 5})

my_call <- function(fun_list, x) {
  if (length(fun_list) == 1) {
    fun_list[[1]](x) 
  } else {
    my_call(fun_list[-length(fun_list)], x) & fun_list[[length(fun_list)]](x)
  }
}
my_vec[my_call(filter_list, my_vec)]
# [1] "AAafszx223"  "AA232fiserf" --> ok

my_vec[Reduce(function(f, ...) f(...), filter_list, my_vec, right = TRUE)]
# character(0) --> wrong
Run Code Online (Sandbox Code Playgroud)

r filter

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

使用stringr :: str_replace在分隔符处分割字符串

我需要有关提取下划线分隔的第三个元素的正则表达式的帮助。下划线的数量是可变的。我可以使用str_split来做到这一点,但是有没有办法使用str_replace获得与下面相同的结果?(期望的结果是x = AAAA, BBBB, CCCC, DDDD。如果可能,请使用来保持分组()。)

library(tidyverse)
library(stringr)

d <- enframe(c("asfe_01_AAAA_fses_feee",
               "asfe_87_BBBB_fses_feee",
               "99_fesf_CCCC_feee",
               "99_fesf_DDDD"),
             name = NULL, value = "txt")

d %>%
  mutate(x = str_replace(txt, "(.+)_(.+)_(.+)_*(.*)_*(.*)", "\\3"),
         want_strsplit = str_split(txt, "_", simplify = TRUE)[, 3])

#txt                    x     want_strsplit
#  <chr>                  <chr> <chr>        
#1 asfe_01_AAAA_fses_feee feee  AAAA         
#2 asfe_87_BBBB_fses_feee feee  BBBB         
#3 99_fesf_CCCC_feee      feee  CCCC         
#4 99_fesf_DDDD           DDDD  DDDD    
Run Code Online (Sandbox Code Playgroud)

regex r tidyverse

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

将yyyymm整数转换为日期

我想将a转换YYYYMM-integer为Date而不将其转换为character(=是否有类似SAS的mdy函数?).我想替换这段代码:

 dateint<-201511
 datestr<-paste(toString(dateint,length=8),'01')
 date<-as.Date(datestr,'%Y%m%d')
 print(date)
 class(date)
Run Code Online (Sandbox Code Playgroud)

有一个工作版本.如果可能,结果类也应该是一个日期:

 year<-dateint %% 100
 month<-floor(dateint/100)
 date2<-ISOdate(year,month,1) # I can't make this work ..
 print(date2)
 class(date2)
Run Code Online (Sandbox Code Playgroud)

谢谢和亲切的问候

integer r date

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

标签 统计

r ×7

dplyr ×3

tidyverse ×3

date ×1

filter ×1

ggplot2 ×1

integer ×1

purrr ×1

regex ×1

stringr ×1