我有以下数据:
\nlibrary(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))\nRun Code Online (Sandbox Code Playgroud)\nid我现在想通过一种获得z依赖值总和的方式来总结数据y。条件y本身取决于 的值x。
我以为我可以使用下面的代码,但这给了我所有输入 id 并且没有\xe2\x80\x98t 总结。结果是正确的,但我仍然希望每个 id 一行。
\ndf %>%\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) 我再次陷入了这个看似简单的任务。
我有以下数据框:
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中的调查问题做一个相当普通的分析,但陷入了中间。
想象一个调查,要求您回答与某些功能相关联的品牌(例如,“品牌”可以是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中的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)
我现在想做的是编写一个执行以下操作的函数:
因此,我希望用户使用的功能如下:
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)