我觉得可能有tidyverse
比for-loop
. 从标准 tibble/dataframe 开始,创建一个列表,其中列表元素的名称是一列的唯一值 ( group_by
?),列表元素是另一列的所有值。
my_data <- tibble(list_names = c("Ford", "Chevy", "Ford", "Dodge", "Dodge", "Ford"),\n list_values = c("Ranger", "Equinox", "F150", "Caravan", "Ram", "Explorer"))\n \n# A tibble: 6 \xc3\x97 2\n list_names list_values\n <chr> <chr> \n1 Ford Ranger \n2 Chevy Equinox \n3 Ford F150 \n4 Dodge Caravan \n5 Dodge Ram \n6 Ford Explorer\n
Run Code Online (Sandbox Code Playgroud)\n这是所需的输出:
\n desired_output <- list(Ford = c("Ranger", "F150", "Explorer"),\n Chevy = c("Equinox"),\n Dodge = c("Caravan", "Ram"))\n\n$Ford\n[1] "Ranger" "F150" "Explorer"\n\n$Chevy\n[1] "Equinox"\n\n$Dodge\n[1] "Caravan" …
Run Code Online (Sandbox Code Playgroud) 我觉得这应该是一件容易的事了ggplot
,tidyverse
,lubridate
,但我似乎无法找到一个很好的解决方案.
目标:根据年份和月份创建汇总/汇总/分组数据的条形图.
#Libraries
library(tidyverse)
library(lubridate)
# Data
date <- sample(seq(as_date('2013-06-01'), as_date('2014-5-31'), by="day"), 10000, replace = TRUE)
value <- rnorm(10000)
df <- tibble(date, value)
# Summarise
df2 <- df %>%
mutate(year = year(date), month = month(date)) %>%
unite(year_month,year,month) %>%
group_by(year_month) %>%
summarise(avg = mean(value),
cnt = n())
# Plot
ggplot(df2) +
geom_bar(aes(x=year_month, y = avg), stat = 'identity')
Run Code Online (Sandbox Code Playgroud)
当我创建year_month变量时,它自然变成一个字符变量而不是一个日期变量.我也试过分组,year(date), month(date)
但后来我无法弄清楚如何使用两个变量作为x轴ggplot
.也许这可以通过将日期安排到本月的第一天来解决......?
我有一个编写的自定义函数,需要一段时间才能在大型数据集上运行,有时会停止运行。我的函数是一个窗口函数(例如cumsum
)。如果我停止执行,所有数据都会丢失。有没有办法在数据传输过程中tidyr
保存dplyr
数据来避免这种情况?
我的数据采用宽格式,并且我在组(例如产品)和许多变量(例如指标)上运行该函数。
Product Year a b c d
1 A 2012 -0.54884514 -0.15416417 0.54861146 1.04147041
2 A 2013 1.22642587 1.43655028 -0.71433978 0.23523411
3 A 2014 -1.49161792 0.53356645 0.44964089 -0.01657906
4 A 2015 -0.72283864 -0.30601369 -0.04536668 -1.24809562
5 A 2016 0.41150740 1.42205301 0.59239525 1.82255169
6 B 2012 0.07279991 1.87163670 1.45773252 -1.93302885
7 B 2013 1.02705536 -2.70856122 0.57013708 1.35345098
8 B 2014 1.35513596 0.05818042 -0.41595725 -2.07142883
9 B 2015 0.40750419 0.13024750 -0.89163416 0.44227276
10 B 2016 …
Run Code Online (Sandbox Code Playgroud) 我有一个数据框,我想重命名几个具有相似名称约定的列(例如,以"X"开头)和/或列位置(例如,4:7).列的新名称存储在向量中.如何在dplyr
链中重命名此列?
# data
df <- tibble(RID = 1,Var1 = "A", Var2 = "B",old_name1 =4, old_name2 = 8, old_name3=20)
new_names <- c("new_name1","new_name2","new_name3")
#psuedo code
df %>%
rename_if(starts_with('old_name'), new_names)
Run Code Online (Sandbox Code Playgroud) 我想获得在黄土功能对每个观测置信区间的上限和下限复制什么ggplot
的呢geom_smooth()
library(ggplot2)
ggplot(mtcars, aes(x = mpg, y = hp)) +
geom_point() +
geom_smooth(method = 'loess')
Run Code Online (Sandbox Code Playgroud)
我知道我可以从线性模型获得上限和下限,但这不适用于黄土:
lm_mod <- lm(hp ~ mpg, mtcars)
predict(lm_mod, mtcars, interval="confidence", level=0.95)
loess_mod <- loess(hp ~ mpg, mtcars)
predict(loess_mod, mtcars, interval="confidence", level=0.95)
Run Code Online (Sandbox Code Playgroud)