如何使用 r 中多个变量的重复和不重复测量来创建一个 tibble?
How to create a tibble with repeated and unrepeated measures of several variables in r?
我想创建一个 tibble
混合重复和不重复的变量测量以及测量日期;
- 3 个变量(
var1
、var2
、var3
)在 4 月、5 月、6 月期间不定期测量了 16 次
- 7 月测量一次的
- 4 个变量(
var4
、var5
、var6
、var7
)
- 2 个变量(
var8
、var9
)也在 7 月测量了一次
为了创建 tibble
,我可以用 variable-date 和测量值的每种组合编写向量,但我想知道是否有更有效的方法,因为 3 个变量重复服用16次。我已经用变量、日期和测量值编写了这段代码,但我被困在那里了。有什么建议吗?
library (tidyverse)
variables <- c(var1, var2, var3, var4, var5, var6, var7, var8, var9)
mydates <- c(2013-04-15,
2013-04-16,
2013-04-17,
2013-04-22,
2013-04-25,
2013-04-29,
2013-05-02,
2013-05-06,
2013-05-09,
2013-05-13,
2013-05-16,
2013-05-20,
2013-05-23,
2013-05-27,
2013-05-30,
2013-06-03,
2013-07-04,
2013-07-08)
measurements <- c(3.2, 4.6, 1.1, 3.0, 3.6, 1.6, 1.4, 1.4, 4.8, 3.5, 4.0,
2.7, 1.4, 2.9, 2.4, 3.6, 3.7, 4.3, 3.6, 3.5, 4.7, 1.8, 3.5, 2.4, 2.1, 1.2,
2.3, 3.9, 1.6, 2.8, 5.0, 2.4, 2.2, 2.9, 1.8, 1.7, 4.4, 3.9, 4.4, 2.6, 1.7,
4.2, 3.4, 4.4, 4.7, 5.0, 3.0, 3.7, 2.1, 2.9, 4.5, 1.5, 2.2, 2.9)
tibble (variables, mydates, measurements)
我想要一个看起来像这样的小标题,我的前 3 个变量每个重复 16 次,我的 16 个第一个约会每个重复 3 次和测量值:
variables mydates measurements
var1 2013-04-15 3.2
var2 2013-04-15 4.6
var3 2013-04-15 1.1
var1 2013-04-16 3.0
var2 2013-04-16 3.6
var3 2013-04-16 1.6
var1 2013-04-17 1.4
var2 2013-04-17 1.4
var3 2013-04-17 4.8
... ... ... # measurements for var1, var2, var3 were repeatedly taken during the 16 first dates in the vector mydates.
var4 2013-07-04 2.1
var5 2013-07-04 2.9
var6 2013-07-04 4.5
var7 2013-07-04 1.5
var8 2013-07-08 2.2
var9 2013-07-08 2.9
这是使用 base::expand.grid
和 lubridate
的(位 'dirty')替代方案。我将您的 mydates
向量转换为 date
class 对象。
获得variables
和mydates
之间的所有组合后,您可以绑定measurements
并使用as_data_frame
转换为tibble
。
library (tidyverse)
library(lubridate)
variables <- c("var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9")
mydates <- c("2013-04-15",
"2013-04-16",
"2013-04-17",
'2013-04-22',
'2013-04-25',
'2013-04-29',
"2013-05-02",
"2013-05-06",
"2013-05-09",
"2013-05-13",
"2013-05-16",
"2013-05-20",
"2013-05-23",
"2013-05-27",
"2013-05-30",
"2013-06-03",
"2013-07-04",
"2013-07-08") %>%
as_date()
measurements <- c(3.2, 4.6, 1.1, 3.0, 3.6, 1.6, 1.4, 1.4, 4.8, 3.5, 4.0,
2.7, 1.4, 2.9, 2.4, 3.6, 3.7, 4.3, 3.6, 3.5, 4.7, 1.8, 3.5, 2.4, 2.1, 1.2,
2.3, 3.9, 1.6, 2.8, 5.0, 2.4, 2.2, 2.9, 1.8, 1.7, 4.4, 3.9, 4.4, 2.6, 1.7,
4.2, 3.4, 4.4, 4.7, 5.0, 3.0, 3.7, 2.1, 2.9, 4.5, 1.5, 2.2, 2.9)
mydata <- expand.grid(vars = variables[1:3],
dates = mydates[month(mydates) < 7]) %>%
rbind(expand.grid(vars = variables[4:7],
dates = mydates[month(mydates) == 7 & day(mydates) == 4])) %>%
rbind(expand.grid(vars = variables[8:9],
dates = mydates[month(mydates) == 7 & day(mydates) == 8])) %>%
mutate(measures = measurements) %>%
as_data_frame()
输出将是:
mydata
## A tibble: 54 x 3
# vars dates measures
# <fct> <date> <dbl>
# 1 var1 2013-04-15 3.2
# 2 var2 2013-04-15 4.6
# 3 var3 2013-04-15 1.1
# 4 var1 2013-04-16 3
# 5 var2 2013-04-16 3.6
# 6 var3 2013-04-16 1.6
# 7 var1 2013-04-17 1.4
# 8 var2 2013-04-17 1.4
# 9 var3 2013-04-17 4.8
#10 var1 2013-04-22 3.5
## ... with 44 more rows
我想创建一个 tibble
混合重复和不重复的变量测量以及测量日期;
- 3 个变量(
var1
、var2
、var3
)在 4 月、5 月、6 月期间不定期测量了 16 次 - 7 月测量一次的
- 4 个变量(
var4
、var5
、var6
、var7
) - 2 个变量(
var8
、var9
)也在 7 月测量了一次
为了创建 tibble
,我可以用 variable-date 和测量值的每种组合编写向量,但我想知道是否有更有效的方法,因为 3 个变量重复服用16次。我已经用变量、日期和测量值编写了这段代码,但我被困在那里了。有什么建议吗?
library (tidyverse)
variables <- c(var1, var2, var3, var4, var5, var6, var7, var8, var9)
mydates <- c(2013-04-15,
2013-04-16,
2013-04-17,
2013-04-22,
2013-04-25,
2013-04-29,
2013-05-02,
2013-05-06,
2013-05-09,
2013-05-13,
2013-05-16,
2013-05-20,
2013-05-23,
2013-05-27,
2013-05-30,
2013-06-03,
2013-07-04,
2013-07-08)
measurements <- c(3.2, 4.6, 1.1, 3.0, 3.6, 1.6, 1.4, 1.4, 4.8, 3.5, 4.0,
2.7, 1.4, 2.9, 2.4, 3.6, 3.7, 4.3, 3.6, 3.5, 4.7, 1.8, 3.5, 2.4, 2.1, 1.2,
2.3, 3.9, 1.6, 2.8, 5.0, 2.4, 2.2, 2.9, 1.8, 1.7, 4.4, 3.9, 4.4, 2.6, 1.7,
4.2, 3.4, 4.4, 4.7, 5.0, 3.0, 3.7, 2.1, 2.9, 4.5, 1.5, 2.2, 2.9)
tibble (variables, mydates, measurements)
我想要一个看起来像这样的小标题,我的前 3 个变量每个重复 16 次,我的 16 个第一个约会每个重复 3 次和测量值:
variables mydates measurements
var1 2013-04-15 3.2
var2 2013-04-15 4.6
var3 2013-04-15 1.1
var1 2013-04-16 3.0
var2 2013-04-16 3.6
var3 2013-04-16 1.6
var1 2013-04-17 1.4
var2 2013-04-17 1.4
var3 2013-04-17 4.8
... ... ... # measurements for var1, var2, var3 were repeatedly taken during the 16 first dates in the vector mydates.
var4 2013-07-04 2.1
var5 2013-07-04 2.9
var6 2013-07-04 4.5
var7 2013-07-04 1.5
var8 2013-07-08 2.2
var9 2013-07-08 2.9
这是使用 base::expand.grid
和 lubridate
的(位 'dirty')替代方案。我将您的 mydates
向量转换为 date
class 对象。
获得variables
和mydates
之间的所有组合后,您可以绑定measurements
并使用as_data_frame
转换为tibble
。
library (tidyverse)
library(lubridate)
variables <- c("var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8", "var9")
mydates <- c("2013-04-15",
"2013-04-16",
"2013-04-17",
'2013-04-22',
'2013-04-25',
'2013-04-29',
"2013-05-02",
"2013-05-06",
"2013-05-09",
"2013-05-13",
"2013-05-16",
"2013-05-20",
"2013-05-23",
"2013-05-27",
"2013-05-30",
"2013-06-03",
"2013-07-04",
"2013-07-08") %>%
as_date()
measurements <- c(3.2, 4.6, 1.1, 3.0, 3.6, 1.6, 1.4, 1.4, 4.8, 3.5, 4.0,
2.7, 1.4, 2.9, 2.4, 3.6, 3.7, 4.3, 3.6, 3.5, 4.7, 1.8, 3.5, 2.4, 2.1, 1.2,
2.3, 3.9, 1.6, 2.8, 5.0, 2.4, 2.2, 2.9, 1.8, 1.7, 4.4, 3.9, 4.4, 2.6, 1.7,
4.2, 3.4, 4.4, 4.7, 5.0, 3.0, 3.7, 2.1, 2.9, 4.5, 1.5, 2.2, 2.9)
mydata <- expand.grid(vars = variables[1:3],
dates = mydates[month(mydates) < 7]) %>%
rbind(expand.grid(vars = variables[4:7],
dates = mydates[month(mydates) == 7 & day(mydates) == 4])) %>%
rbind(expand.grid(vars = variables[8:9],
dates = mydates[month(mydates) == 7 & day(mydates) == 8])) %>%
mutate(measures = measurements) %>%
as_data_frame()
输出将是:
mydata
## A tibble: 54 x 3
# vars dates measures
# <fct> <date> <dbl>
# 1 var1 2013-04-15 3.2
# 2 var2 2013-04-15 4.6
# 3 var3 2013-04-15 1.1
# 4 var1 2013-04-16 3
# 5 var2 2013-04-16 3.6
# 6 var3 2013-04-16 1.6
# 7 var1 2013-04-17 1.4
# 8 var2 2013-04-17 1.4
# 9 var3 2013-04-17 4.8
#10 var1 2013-04-22 3.5
## ... with 44 more rows