假设我有一个像这样的数据框,带有字符串向量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个字符.
我有一个看起来像这样的列表.
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) 我已经绘制了一个线图。我在图上添加了一条水平线。如何取水平线红色虚线?
# 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) 我想我们大多数人已经使用过这样的东西(至少如果你正在使用 tidyverse):
library(tidyverse)
example <- mtcars
example <- example %>%
select(- mpg)
Run Code Online (Sandbox Code Playgroud)
我的问题:我知道这部分有一个快捷方式:
example <- example %>% ...
Run Code Online (Sandbox Code Playgroud)
但我既不记得也不在谷歌上找到它。
我认为它类似于这个 %<>%。
任何人都可以帮忙吗?
如果之前已经问过这个问题,请原谅。
此致
我写了以下函数来制作一个定制的堆积图:
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) ;在你的笔记本单元格的末尾放一个,但是当我使用 Plotnine 时它似乎并没有抑制烦人的输出文本(但它显然适用于 matplotlib 等)有任何想法吗 ?
是否有可能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) 这是一个最小的可重现示例:
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]], ...) 中的错误:找不到对象“参与者”
如何将分散的点与分组变量相结合,但保持分离的小提琴独立?
(注意:第一个图中的垂直线只是因为我有 …
我正在努力独立地为每个方面绘制渐变色标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()
我对 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)
听说我不太确定最好的方向。我猜想我想将这个逻辑向量与勇气结合使用,但似乎无法弄清楚。任何帮助,将不胜感激!
干杯,乔纳森