小编JWi*_*man的帖子

使用dplyr tidyr保留汇总表中输入变量和因子水平的顺序

我喜欢这么简单,dplyr并且tidyr创建了一个包含多个预测变量和结果变量的汇总表.令我难过的一件事是在输出表中保留/定义预测变量的顺序及其因子水平的最后一步.

我已经提出了各种解决方案(下面),其中涉及使用mutate手动创建一个因子变量,该变量将预测变量和预测变量值(例如"gender_female")与所需输出顺序中的级别相结合.但是如果有很多变量,我的解决方案有点长,我想知道是否有更好的方法?

library(dplyr)
library(tidyr)
levels_eth <- c("Maori", "Pacific", "Asian", "Other", "European", "Unknown")
levels_gnd <- c("Female", "Male", "Unknown")

set.seed(1234)

dat <- data.frame(
  gender    = factor(sample(levels_gnd, 100, replace = TRUE), levels = levels_gnd),
  ethnicity = factor(sample(levels_eth, 100, replace = TRUE), levels = levels_eth),
  outcome1  = sample(c(TRUE, FALSE), 100, replace = TRUE),
  outcome2  = sample(c(TRUE, FALSE), 100, replace = TRUE)
)

dat %>% 
  gather(key = outcome, value = outcome_value, contains("outcome")) %>%
  gather(key = predictor, value = pred_value, …
Run Code Online (Sandbox Code Playgroud)

r dplyr tidyr

5
推荐指数
2
解决办法
1537
查看次数

tidyr unnest,在取消嵌套期间使用嵌套名称为列名称添加前缀

unnest在a 上运行时,data.frame有没有办法将嵌套项的组名称添加到它包含的各个列(作为后缀或前缀)。或者是否必须通过手动完成重命名rename

这与“取消嵌套”包含同名列的多个组尤其相关。

在下面的示例中,base aggregate该命令做得很好(例如 Petal.Length.mn),但我找不到执行unnest相同操作的选项?

我使用nestwith是purrr::map因为我想要灵活地混合功能,例如。计算几个变量的均值和标准差,并运行测试以查看它们之间的差异。


library(dplyr, warn.conflicts = FALSE)

msd_c <- function(x) c(mn = mean(x), sd = sd(x))
msd_df <- function(x) bind_rows(c(mn = mean(x), sd = sd(x)))

aggregate(cbind(Petal.Length, Petal.Width) ~ Species, 
          data = iris, FUN = msd_c)
#>      Species Petal.Length.mn Petal.Length.sd Petal.Width.mn Petal.Width.sd
#> 1     setosa       1.4620000       0.1736640      0.2460000      0.1053856
#> 2 versicolor       4.2600000       0.4699110      1.3260000      0.1977527
#> 3  virginica       5.5520000       0.5518947      2.0260000      0.2746501

iris …
Run Code Online (Sandbox Code Playgroud)

r unnest tidyr

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

R - 如何将公式传递给 with(data, lm(y ~ x)) 结构

这个问题与R - 如何将公式传递给函数内的 with(df, glm(y ~ x)) 构造高度相关,但提出了更广泛的问题。

为什么这些表达式有效?

text_obj <- "mpg ~ cyl"
form_obj <- as.formula(text_obj)

with(mtcars, lm(mpg ~ cyl)) 
with(mtcars, lm(as.formula(text_obj))) 
lm(form_obj, data = mtcars)
Run Code Online (Sandbox Code Playgroud)

但不是这个吗?

with(mtcars, lm(form_obj))
Error in eval(predvars, data, env) : object 'mpg' not found
Run Code Online (Sandbox Code Playgroud)

我通常会使用该data参数,但这在mice包中是不可能的。IE。

library(mice)
mtcars[5, 5] <- NA # introduce a missing value to be imputed
mtcars.imp = mice(mtcars, m = 5)
Run Code Online (Sandbox Code Playgroud)

这些不起作用

lm(form_obj, data = mtcars.imp)
with(mtcars.imp, lm(form.obj))
Run Code Online (Sandbox Code Playgroud)

但这确实

with(mtcars.imp, lm(as.formula(text_obj)))
Run Code Online (Sandbox Code Playgroud)

因此,是否总是as.formula在函数内部使用参数,而不是先构造它然后将其传入?

r lm r-mice

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

标签 统计

r ×3

tidyr ×2

dplyr ×1

lm ×1

r-mice ×1

unnest ×1