小编des*_*hen的帖子

分组汇总仍然给出每个单独行的结果

我有以下数据:

\n
library(tidyverse)\n\ndf <- data.frame(id = c(1,1,1,2,2,2),\n                 x = rep(letters[1:2], each = 3),\n                 y = c(3,4,3,5,6,5),\n                 z = c(7,8,9,10,11,12))\n
Run Code Online (Sandbox Code Playgroud)\n

id我现在想通过一种获得z依赖值总和的方式来总结数据y。条件y本身取决于 的值x

\n

我以为我可以使用下面的代码,但这给了我所有输入 id 并且没有\xe2\x80\x98t 总结。结果是正确的,但我仍然希望每个 id 一行。

\n
df %>%\n  group_by(id) %>%\n  summarize(test = case_when(x == 'a' ~ sum(z[y == 3]),\n                             x == 'b' ~ sum(z[y == 5])))\n\n# A tibble: 6 x 2\n# Groups:   id [2]\n     id  test\n  <dbl> <dbl>\n1     1    16\n2     1    16\n3     1    16\n4     2    22\n5     2 …
Run Code Online (Sandbox Code Playgroud)

r summarize tidyverse

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

使用 purrr::map2 (?) 将新列添加到数据框

我再次陷入了这个看似简单的任务。

我有以下数据框:

df <- data.frame(x1 = 1:3,
                 x2 = 2:4,
                 x3 = 3:5,
                 y1 = 1:3,
                 y2 = 2:4,
                 y3 = 3:5)
Run Code Online (Sandbox Code Playgroud)

我现在只想“循环”每个下标并将 x* 与 y* 列相乘,即 x1 * y1、x2 * y2 等,并将这些结果添加到我的数据中。

对于这些类型的任务,我总是认为这应该可以通过某种map方法轻松完成,但我没有让它发挥作用,例如

library(tidyverse)
df |>
  map2(.x = _,
       .y = 1:3,
       .f = ~.x |>
         mutate(!!sym(paste0(results, .y)) := !!sym(paste0(x, .y)) * !!sym(paste0(y, .y))))
Run Code Online (Sandbox Code Playgroud)

不起作用。

我还考虑过使用 的东西across,但这也行不通,因为我无法告诉对 x 和 y 输入进行“矢量化”。

有任何想法吗?

r purrr tidyverse

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

R跨多个列的多项选择调查问题的频率表

我想对R中的调查问题做一个相当普通的分析,但陷入了中间。

想象一个调查,要求您回答与某些功能相关联的品牌(例如,“品牌”可以是PlayStation,XBox ...,功能可以是“速度”,“图形” ...每个品牌可以在哪里检查了几个功能,也称为多选)。例如。在这里是这样的:https : //www.harvestyourdata.com/fileadmin/images/question-type-screenshots/Grid-multi-select.jpg

您通常将这些问题称为多选网格或矩阵问题。

无论如何,从数据角度来看,这类数据通常以宽格式存储,其中每行*列的组合是一个变量,其编码为0/1(如果调查参与者未选中该框,则为0,否则为1)。

假设我们有5个品牌和10个商品,则总共有50个变量,理想情况下遵循一个很好的结构化命名方案,例如item1_column1,item2_column1,item3_column1,[...],item1_column2等。

现在,我想一次迭代分析(频率表)所有这些变量。我已经在问题包中找到了cross.multi.table函数。但是,它仅允许基于单个因素分析所有项目。我需要的是同时允许多列。

有任何想法吗?我是否可能缺少另一个软件包中的函数,或者可以使用tidyverse甚至使用cross.multi.table函数轻松完成此操作?

使用此数据作为测试输入:

dat = data.frame(item1_column1 = c(0,1,1,1),
                 item2_column1 = c(1,1,1,0),
                 item3_column1 = c(0,0,1,1),
                 item1_column2 = c(1,1,1,0),
                 item2_column2 = c(0,1,1,1),
                 item3_column2 = c(1,0,1,1),
                 item1_column3 = c(0,1,1,0),
                 item2_column3 = c(1,1,1,1),
                 item3_column3 = c(0,0,1,0))
Run Code Online (Sandbox Code Playgroud)

我希望这个输出:

         column1    column2    column3
item1    3          3          2
item2    3          3          4
item3    2          3          1
Run Code Online (Sandbox Code Playgroud)

或理想的比例/百分比:

         column1    column2    column3
item1    75%        75%        50%
item2    75%        75%        100%
item3    50%        75%        25%
Run Code Online (Sandbox Code Playgroud)

r survey multi-select reshape

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

R自己函数中R中的动态变量引用的R准引用和tidyeval

我试图在我自己的函数中使用R中的tidyverse的准引用。我在这里已经读过这一篇文章:将参数列表传递给带有准引号的函数,以及此处的全部内容:https : //tidyeval.tidyverse.org/

但是我仍然无法正常工作。

假设我有以下数据:

dat <- data.frame(time   = runif(20),
                  group1 = rep(1:2, times = 10),
                  group2 = rep(1:2, each = 10),
                  group3 = rep(3:4, each = 10))
Run Code Online (Sandbox Code Playgroud)

我现在想做的是编写一个执行以下操作的函数:

  • 取一个数据集
  • 指定包含时间的变量(请注意,在另一个数据集中,这可能称为“小时”或“ qtime”或其他名称)
  • 指定我要对哪些组进行操作/统计

因此,我希望用户使用的功能如下:

test_function(data = dat, time_var = "time", group_vars = c("group1", "group3")) 请注意,下次我可能选择其他分组变量,或者没有选择。

假设在我要执行的功能中:

  • 计算有关时间变量的某些统计信息,例如分位数。注意:我想按我的分组变量进行拆分

这是我最近的尝试之一:

test_function <- function(data, time_var = NULL, group_vars = NULL)
{
# Note I initialize the variables with NULL, since e.g. the user might not specify a grouping 

and I …
Run Code Online (Sandbox Code Playgroud)

r tidyeval quosure

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

标签 统计

r ×4

tidyverse ×2

multi-select ×1

purrr ×1

quosure ×1

reshape ×1

summarize ×1

survey ×1

tidyeval ×1