小编mar*_*kus的帖子

每隔n个字符拆分字符串新列

假设我有一个像这样的数据框,带有字符串向量var2

var1  var2
1     abcdefghi 
2     abcdefghijklmnop
3     abc 
4     abcdefghijklmnopqrst
Run Code Online (Sandbox Code Playgroud)

将每n个字符的var2拆分为新列的最有效方法是什么,直到每个字符串结束为止,

例如,如果每4个字符,输出将如下所示:

var1  var2                  new_var1  new_var2 new_var3  new_var4  new_var5
1     abcdefghi             abcd      efgh     i 
2     abcdefghijklmnop      abcd      efgh     ijkl      mnop 
3     abc                   abc
4     abcdefghijklmnopqrst  abcd      efgh     ijkl      mnop      qrst 
Run Code Online (Sandbox Code Playgroud)

stringr包?使用"str_split_fixed"

或使用正则表达式:

gsub("(.{4})", "\\1 ", "abcdefghi")
Run Code Online (Sandbox Code Playgroud)

根据var2的长度创建转到new_var_n的新列的容量,例如可以是10000个字符.

substring r gsub stringr

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

名称与列表名称相同的字符向量

我有一个看起来像这样的列表.

my_list <- list(Y = c("p", "q"), K = c("s", "t", "u"))
Run Code Online (Sandbox Code Playgroud)

我想用它们所在列表的名称命名每个列表元素(字符向量).同一向量的所有元素必须具有相同的名称

我能够编写适用于单个列表元素的此函数

name_vector <- function(x){
      names(x[[1]]) <- rep(names(x[1]), length(x[[1]]))
      return(x)
    }

> name_vector(my_list[1])
$Y
  Y   Y 
"p" "q" 
Run Code Online (Sandbox Code Playgroud)

但无法找到一种矢量化的方法.如果我使用apply函数运行它,它只会返回列表不变

> lapply(my_list, name_vector)
$K
[1] "p" "q"

$J
[1] "x" "y"
Run Code Online (Sandbox Code Playgroud)

我想要的my_list输出是一个命名向量

 Y   Y   K   K   K  
"p" "q" "s" "t" "u"
Run Code Online (Sandbox Code Playgroud)

r vector named dataframe

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

如何在ggplot中添加带有标签的水平虚线

我已经绘制了一个线图。我在图上添加了一条水平线。如何取水平线红色虚线?

# Sample Data 

library(tidyverse)
Month= c("Jan","Feb","Mar","Apr","May","Jun")
a = c(11,10,9,8,4,8)

test= data_frame(Month,a) 
test$cum_total <- cumsum(test$a)

test$Month <- factor(test$Month, month.abb)

# ggplot

ggplot(data=test, aes(x=Month, y=cum_total, group=1)) +
  geom_line()+
  geom_point()+
  geom_hline(yintercept=40)+
  annotate("text", x = "Feb", y = 40, label = "Previous Level", vjust = -0.5)
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

用快捷方式替换 df &lt;- df %&gt;% ...

我想我们大多数人已经使用过这样的东西(至少如果你正在使用 tidyverse):

library(tidyverse)

example <- mtcars
example <- example %>%
  select(- mpg)
Run Code Online (Sandbox Code Playgroud)

我的问题:我知道这部分有一个快捷方式:

example <- example %>% ...
Run Code Online (Sandbox Code Playgroud)

但我既不记得也不在谷歌上找到它。

我认为它类似于这个 %<>%。

任何人都可以帮忙吗?

如果之前已经问过这个问题,请原谅。

此致

r magrittr

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

如何在geom_col/geom_area上绘制一个因子级别作为基础

我写了以下函数来制作一个定制的堆积图:

stacked_plot <- function(data, what, by = NULL, date_col = date, date_unit = NULL, type = 'area'){

  by <- enquo(by)
  what <- ensym(what)
  date_col <- ensym(date_col)
  date_unit <- enquo(date_unit)

  if (!rlang::as_string(date_col) %in% names(data)){
    return(cat('Nie odnaleziono kolumny "', as_string(date_col), '".', sep = ''))
  }

  if (!rlang::quo_is_null(date_unit)){
    data <- data %>%
      mutate(!!date_col := floor_date(!!date_col, unit = !!date_unit, week_start = 1))
  }

  if (!rlang::quo_is_null(by)) {
    data <- data %>%
      filter(!is.na(!!by)) %>%
      group_by(!!date_col, !!by) %>%
      summarise(!!what := sum(!!what, na.rm = TRUE)) %>%
      ungroup() %>% …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 forcats geom-col

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

Plotnine:如何在绘制图形时删除 ggplot:(xxx) 类型烦人的文本输出

  • 运行 jupyter notebook (python)
  • 使用 Python Plotnine库绘图
  • 我绘制并在输出图形下方是烦人的“ggplot2:(数字)”输出
  • 通常你会;在你的笔记本单元格的末尾放一个,但是当我使用 Plotnine 时它似乎并没有抑制烦人的输出文本(但它显然适用于 matplotlib 等)

有任何想法吗 ?

python ggplot2 jupyter-notebook plotnine

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

使用dplyr和select_if从数据框中删除列表列

是否有可能dpyr select像删除单个列一样删除数据框中的所有列表列?

df <- tibble(
  a = LETTERS[1:5],
  b = 1:5,
  c = list('bob', 'cratchit', 'rules!','and', 'tiny tim too"')
)


df %>% 
  select_if(-is.list)
Error in -is.list : invalid argument to unary operator
Run Code Online (Sandbox Code Playgroud)

这似乎是一个可行的解决方法,但想知道是否可以使用完成select_if

df %>%
  select(-which(map(df,class) == 'list'))
Run Code Online (Sandbox Code Playgroud)

r list dplyr

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

将意大利面条图(带有分组变量)与 ggplot2 中的分裂小提琴(没有它)相结合

这是一个最小的可重现示例:

library(ggplot2)


mydata <- data.frame(condition = c(rep("One",40), rep("Two",40)),
                     participant = rep(1:40,2),
                     observation = c(rnorm(40,2,1), rnorm(40,0,1)))

#my.plot <- ggplot(mydata, aes(x=condition, y=observation, group=participant)) +
my.plot <- ggplot(mydata, aes(x=condition, y=observation)) +
  geom_point(size=3) +
  geom_line(size=1, alpha=0.5) +
  xlab('condition') +
  ylab('Observation') 

dataDensity <- mydata %>%
  group_by(condition) %>%
  do(data.frame(loc = density(.$observation)$x,
                dens = density(.$observation)$y,
                participant=1))

dataDensity$dens <- ifelse(dataDensity$condition == "One", .9+(dataDensity$dens * -1), 2.1+(dataDensity$dens))
my.plot + geom_polygon(data = dataDensity, aes(dens, loc, fill = condition))
Run Code Online (Sandbox Code Playgroud)

这给了我以下情节: 在此处输入图片说明

这接近我想要的,但不完全。我实际上想将条件“一”和“二”之间的每个对应点对分组。因此,当我添加分组变量时(就像我在上面的代码片段中注释掉的行一样),我遇到了这个问题:

在此处输入图片说明

这很有趣,但不是我所追求的。

我必须添加 hack/workaroundparticipant=1以防止出现错误消息:

FUN(X[[i]], ...) 中的错误:找不到对象“参与者”

如何将分散的点与分组变量相结合,但保持分离的小提琴独立?

(注意:第一个图中的垂直线只是因为我有 …

r ggplot2 violin-plot

5
推荐指数
0
解决办法
329
查看次数

facet_wrap() + ggplot2() 中每个面的独立颜色渐变

我正在努力独立地为每个方面绘制渐变色标facet_wrap()。数据太大,无法在这里发布,但这是我的代码:

ggplot(stack, aes(hour, day)) + 
  geom_tile(aes(fill = percent), colour = "white") + 
  facet_wrap(~author, ncol = 3) +
  theme_minimal() +
  scale_fill_distiller(palette = 'RdYlBu') +
  theme(
    axis.title.x = element_blank(), axis.title.y = element_blank(),
    legend.position = "none",
    strip.background = element_rect(fill = '#E5E6E1'),
    strip.text = element_text(face = 'bold')
  )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

然而,如果我只单独绘制一位作者,我会得到:

在此输入图像描述

我只想用自己的渐变色标绘制每个面,而不是与其他面共享。应该很简单,但我没能做到。我尝试添加group = authorinaes()和但它不起作用geom_tile()ggplot()

gradient r colors ggplot2 facet-wrap

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

R - 使用列表中每个项目的第一个元素过滤列表

我对 R 相当陌生,我正在尝试将 PDF 中的数据解析为数据表。我已经能够将文本解析为列表,但我很难尝试从列表中过滤数据。

例如,请考虑下面的示例列表:

l_vectors <- list( c("K", "10", "20"),
                   c("1", "30", "40"),
                   c("a", "b", "c"),
                   c("x", "y", "z"))
Run Code Online (Sandbox Code Playgroud)

假设我想过滤此列表,使其仅包含以“K”或“1”开头的向量

我可以使用 map_lgl 来查找逻辑向量,指示哪些列表项是匹配的

map_lgl(l_vectors, function(x) x[1] == "K" | x[1] == "1" )
[1]  TRUE  TRUE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

听说我不太确定最好的方向。我猜想我想将这个逻辑向量与勇气结合使用,但似乎无法弄清楚。任何帮助,将不胜感激!

干杯,乔纳森

r list subset purrr

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