【问题标题】:How to create a vector of variables using summarise?如何使用摘要创建变量向量?
【发布时间】:2020-06-02 13:09:22
【问题描述】:

这是一个初学者的问题:

我喜欢使用 summarise(),但有时我发现存储结果很困难。 例如,我知道我可以通过以下方式存储 1 个值:

stdv <- Data %>%
 filter(x == 1) %>%
 summarise(stdv = sd(y))

但如果我尝试对超过 1 个变量这样做,我会遇到麻烦。 我认为这与在开始时创建向量 o 变量有关,但这不起作用:

c(dog, cat) <- Data %>%
 filter(x == 1) %>%
 summarise(dog = sd(y),
           cat = mean(y))

有人可以帮忙吗?谢谢你

【问题讨论】:

  • 欢迎您! Data %&gt;% filter(x == 1) %&gt;% summarise(dog = sd(y), cat = mean(y)) 返回什么?
  • 这个赋值操作看起来很pythonic。在 R 中,您一次只能分配给一个变量。 Data %&gt;% filter(x == 1) %&gt;% summarise(dog = sd(y), cat = mean(y)) 应该返回一个数据框,您可以将其分配给一个变量。
  • 这能回答你的问题吗? Summarizing multiple columns with dplyr?
  • 您的预期输出是什么?也许将c(dog, cat) &lt;- 替换为df &lt;- 以将您的输出存储在data.frame 中?
  • 如果您真的想一次分配给两个变量,请使用zeallot 包。查看here 以获得简短说明。

标签: r dplyr summarize


【解决方案1】:

您可以将它存储在这样的向量中:

save_vector <- df %>% 
  summarise(dog = sd(id),
            cat = var(id)) %>% 
  unlist()
save_vector 

#     dog      cat 
#1.636392 2.677778 

数据

structure(list(id = c("1", "4", "3", "4", "6", "3", "5", "6", 
"2", "3")), row.names = c(NA, -10L), class = c("tbl_df", "tbl", 
"data.frame"))

【讨论】:

    【解决方案2】:

    我们可以使用base R 方法

    with(df, c(dog = sd(id), cat = var(id)))
    #    dog      cat 
    #1.636392 2.677778 
    

    数据

    df <- structure(list(id = c("1", "4", "3", "4", "6", "3", "5", "6", 
    "2", "3")), row.names = c(NA, -10L), class = c("tbl_df", "tbl", 
    "data.frame"))
    

    【讨论】:

      猜你喜欢
      • 2022-11-11
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多