如何在 dplyr 的常规变异中创建基于 lm 的变量?
how to create a variable based on lm in a regular mutate in dplyr?
考虑这个简单的例子:
library(dplyr)
library(broom)
dataframe <- data_frame(id = c(1,2,3,4,5,6),
group = c(1,1,1,2,2,2),
value = c(200,400,120,300,100,100))
# A tibble: 6 x 3
id group value
<dbl> <dbl> <dbl>
1 1 1 200
2 2 1 400
3 3 1 120
4 4 2 300
5 5 2 100
6 6 2 100
这里我想按 group
分组并创建两列。
一个是value
中不同值的数量(我可以使用dplyr::n_distinct
),另一个是向量1上value
回归的常数项。那是
的输出
tidy(lm(data = dataframe, value ~ 1)) %>% select(estimate)
estimate
1 203.3333
这里的难点在于将这两个简单的输出组合成一个 mutate
保留分组的语句。
我试过类似的方法:
formula1 <- function(data, myvar){
tidy(lm(data = data, myvar ~ 1)) %>% select(estimate)
}
dataframe %>% group_by(group) %>%
mutate(distinct = n_distinct(value),
mean = formula1(., value))
但这不起作用。我在这里缺少什么?
谢谢!
如果您使用 pull
代替 select
,此方法将起作用。这从 tidy
输出中提取单个 estimate
值。
formula1 <- function(data, myvar){
tidy(lm(data = data, myvar ~ 1)) %>% pull(estimate)
}
dataframe %>%
group_by(group) %>%
mutate(distinct = n_distinct(value),
mean = formula1(., value))
# A tibble: 6 x 5
# Groups: group [2]
id group value distinct mean
<dbl> <dbl> <dbl> <int> <dbl>
1 1 1 200 3 240.0000
2 2 1 400 3 240.0000
3 3 1 120 3 240.0000
4 4 2 300 2 166.6667
5 5 2 100 2 166.6667
6 6 2 100 2 166.6667
考虑这个简单的例子:
library(dplyr)
library(broom)
dataframe <- data_frame(id = c(1,2,3,4,5,6),
group = c(1,1,1,2,2,2),
value = c(200,400,120,300,100,100))
# A tibble: 6 x 3
id group value
<dbl> <dbl> <dbl>
1 1 1 200
2 2 1 400
3 3 1 120
4 4 2 300
5 5 2 100
6 6 2 100
这里我想按 group
分组并创建两列。
一个是value
中不同值的数量(我可以使用dplyr::n_distinct
),另一个是向量1上value
回归的常数项。那是
tidy(lm(data = dataframe, value ~ 1)) %>% select(estimate)
estimate
1 203.3333
这里的难点在于将这两个简单的输出组合成一个 mutate
保留分组的语句。
我试过类似的方法:
formula1 <- function(data, myvar){
tidy(lm(data = data, myvar ~ 1)) %>% select(estimate)
}
dataframe %>% group_by(group) %>%
mutate(distinct = n_distinct(value),
mean = formula1(., value))
但这不起作用。我在这里缺少什么? 谢谢!
如果您使用 pull
代替 select
,此方法将起作用。这从 tidy
输出中提取单个 estimate
值。
formula1 <- function(data, myvar){
tidy(lm(data = data, myvar ~ 1)) %>% pull(estimate)
}
dataframe %>%
group_by(group) %>%
mutate(distinct = n_distinct(value),
mean = formula1(., value))
# A tibble: 6 x 5
# Groups: group [2]
id group value distinct mean
<dbl> <dbl> <dbl> <int> <dbl>
1 1 1 200 3 240.0000
2 2 1 400 3 240.0000
3 3 1 120 3 240.0000
4 4 2 300 2 166.6667
5 5 2 100 2 166.6667
6 6 2 100 2 166.6667