使用dplyr计算R数据帧中的成对差异

托马斯·菲利普斯

我创建一个简单的数据框:

library(dplyr)

df <- tibble(
        UserId = c("A", "A", "A", "A", "A", "B", "B", "B", "B"),
        Answer_Date = as.Date(c("2010-12-31", "2011-12-29", "2012-12-25", "2013-12-10", "2014-12-31", "2010-10-31", "2011-10-28", "2013-10-31", "2015-10-31")),
        Q1 = c(3, 1, 1, 0, 1, 4, 2, 5, 4),
        Q2 = c(2, 0, 1, 2, 1, 8, 2, 6, 5),
      ) %>%
        group_by(UserId) %>%
        mutate(First_Date = min(Answer_Date)) %>%
        mutate(Last_Date  = max(Answer_Date)) %>%
        ungroup()

这给了我

> df
# A tibble: 9 x 6
  UserId Answer_Date    Q1    Q2 First_Date Last_Date 
  <chr>  <date>      <dbl> <dbl> <date>     <date>    
1 A      2010-12-31      3     2 2010-12-31 2014-12-31
2 A      2011-12-29      1     0 2010-12-31 2014-12-31
3 A      2012-12-25      1     1 2010-12-31 2014-12-31
4 A      2013-12-10      0     2 2010-12-31 2014-12-31
5 A      2014-12-31      1     1 2010-12-31 2014-12-31
6 B      2010-10-31      4     8 2010-10-31 2015-10-31
7 B      2011-10-28      2     2 2010-10-31 2015-10-31
8 B      2013-10-31      5     6 2010-10-31 2015-10-31
9 B      2015-10-31      4     5 2010-10-31 2015-10-31

我现在希望计算每个受试者回答问卷的第一个日期和最后一个日期之间答案的变化。我先写

df_tmp <- df %>%
            filter(Answer_Date == First_Date) %>%
            select(c("UserId", "Q1", "Q2"))
colnames(df_tmp) <- c("UserId", paste0("First_Response_", c("Q1", "Q2")))
df <- merge(df, df_tmp, by = "UserId") 

df_tmp <- df %>%
            filter(Answer_Date == Last_Date) %>%
            select(c("UserId", "Q1", "Q2"))
colnames(df_tmp) <- c("UserId", paste0("Last_Response_", c("Q1", "Q2")))
df <- merge(df, df_tmp, by = "UserId")

给我

> df
  UserId Answer_Date Q1 Q2 First_Date  Last_Date First_Q1 First_Q2 Last_Q1 Last_Q2
1      A  2010-12-31  3  2 2010-12-31 2014-12-31        3        2       1       1
2      A  2011-12-29  1  0 2010-12-31 2014-12-31        3        2       1       1
3      A  2012-12-25  1  1 2010-12-31 2014-12-31        3        2       1       1
4      A  2013-12-10  0  2 2010-12-31 2014-12-31        3        2       1       1
5      A  2014-12-31  1  1 2010-12-31 2014-12-31        3        2       1       1
6      B  2010-10-31  4  8 2010-10-31 2015-10-31        4        8       4       5
7      B  2011-10-28  2  2 2010-10-31 2015-10-31        4        8       4       5
8      B  2013-10-31  5  6 2010-10-31 2015-10-31        4        8       4       5
9      B  2015-10-31  4  5 2010-10-31 2015-10-31        4        8       4       5

现在,我希望创建两个now列,Delta_Q1 = Last_Q1 - First_Q1并且Delta_Q2 = Last_Q2 - First_Q2,但(可能)使用mutate, paste0("First_", c("Q1", "Q2")), paste0("Last_", c("Q1", "Q2"))paste0("Delta_", c("Q1", "Q2"))

顺序计算成对的列之间的差异(或通常是两个变量的某些函数)的正确语法是什么?我不想手动记下差异的原因很简单-实际的数据框有很多成对的列。

在此先感谢您的帮助。

真诚的

托马斯·菲利普斯

罗纳克·沙

您可以创建两个列向量,然后直接将它们相减以创建新列。

first_r_col <- grep('First_Response', colnames(df))
last_r_col <- grep('Last_Response', colnames(df))
df[paste0('delta', seq_along(first_r_col))] <- df[last_r_col] - df[first_r_col]

使用dplyr select语句可能是选择列的简便方法。

library(dplyr)
df[paste0('delta', seq_along(first_r_col))]  <- 
         df %>% select(starts_with('Last_Response')) - 
         df %>% select(starts_with('First_Response'))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在R中为此数据帧计算差异

来自分类Dev

数据帧R中的成对减法

来自分类Dev

使用dplyr计算数据帧中多列中的“是”

来自分类Dev

计算R中成对数据中平均值之间的差异

来自分类Dev

使用dplyr计算数据帧中的梯度

来自分类Dev

计算R中向量中的所有成对差异

来自分类Dev

数据帧中的成对相关

来自分类Dev

使用R对数据帧中的成对变量进行Granger因果分析

来自分类Dev

R中的成对计算

来自分类Dev

使用dplyr在R中按组过滤数据帧

来自分类Dev

使用dplyr在R中处理数据帧后的全联接

来自分类Dev

使用dplyr在R中按组过滤数据帧

来自分类Dev

使用dplyr应用R数据帧中几列的功能

来自分类Dev

使用dplyr查找成对的列的差异

来自分类Dev

从R中的数据帧创建成对值的平方矩阵

来自分类Dev

使用dplyr等使用R操纵数据帧

来自分类Dev

计算数据帧中条件变化时的行差异

来自分类Dev

计算数据帧中子集的差异

来自分类Dev

计算数据帧组内的差异

来自分类Dev

如何使用dplyr查找R数据框中两行中的值之间的差异

来自分类Dev

如何使用dplyr查找R数据框中两行中的值之间的差异

来自分类Dev

如何使用外积计算R中的成对欧几里得距离

来自分类Dev

如何使用外部乘积计算R中的成对欧几里得距离

来自分类Dev

如何使用 r 中包含 POSIXlt 数据类型的数据帧在 dplyr 中分组

来自分类Dev

按R中的行差异聚合数据帧

来自分类Dev

如何解决数据帧中的编码,而不考虑R中的行或列(使用dplyr)?

来自分类Dev

如何解决数据帧中的编码,而不考虑R中的行或列(使用dplyr)?

来自分类Dev

计算numpy中两个向量之间的成对差异?

来自分类Dev

使用dplyr R中的last_col()函数过滤数据帧

Related 相关文章

热门标签

归档