r - Dplyr:在不均匀因子水平内减去

标签 r dplyr

我正在努力学习 dplyr ,而且我找不到有关 Stackoverflow 或文档的相对简单问题的答案。我想我会在这里问。

我有一个如下所示的 data.frame:

set.seed(1)
dat<-data.frame(rnorm(10,20,20),rep(seq(5),2),rep(c("a","b"),5))
names(dat)<-c("number","factor_1","factor_2")
dat<-dat[order(dat$factor_1,dat$factor_2),]
dat<-dat[c(-3,-7),]



       number factor_1 factor_2
1   7.470924        1        a
6   3.590632        1        b
2  23.672866        2        b
3   3.287428        3        a
8  34.766494        3        b
4  51.905616        4        b
5  26.590155        5        a
10 13.892232        5        b

我想用 dplyr减去值 numberfactor_2=="b" 相关的列来自 factor_2=="a"在因子一的每个水平内。

生成的 data.frame 的第一行如下所示:
        diff factor_1
1    3.880291        1        

需要注意的是,factor_2 的每个级别并不总是有值。在factor_1的每个级别内.如果是这种情况,我想分配 0number与缺失因子水平相关。

感谢您的帮助。

最佳答案

这是一种方法:

set.seed(1)
dat<-data.frame(rnorm(10,20,20),rep(seq(5),2),rep(c("a","b"),5))
names(dat)<-c("number","factor_1","factor_2")
dat<-dat[order(dat$factor_1,dat$factor_2),]
dat<-dat[c(-3,-7),]
#      number factor_1 factor_2
#1   7.470924        1        a
#6   3.590632        1        b
#2  23.672866        2        b
#3   3.287428        3        a
#8  34.766494        3        b
#4  51.905616        4        b
#5  26.590155        5        a
#10 13.892232        5        b

library(dplyr)
dat %>% 
  group_by(factor_1) %>% 
  summarize(diff=number[match('a',factor_2)]-number[match('b',factor_2)]) -> 
  d2

d2$diff[is.na(d2$diff)] <- 0

d2
# Source: local data frame [5 x 2]
# 
#   factor_1       diff
# 1        1   3.880291
# 2        2   0.000000
# 3        3 -31.479066
# 4        4   0.000000
# 5        5  12.697923

关于r - Dplyr:在不均匀因子水平内减去,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753549/

相关文章:

mysql - 在向后查找和向前查找特定日期列中的日期中查找最近的日期

r - dplyr::mutate:- 新列 = 两个逗号分隔列表列之间的差异

r - 在自定义函数中对 data.cube 进行子集化

r - ggplot2:没有填充的geom_polygon

r - 求解 R/BlackScholesMerton 模型中的非线性方程组

python - 在 R 中读取泡菜文件(PANDAS Python 数据框)

r - 如何在 R 中翻转数值数据?

R:使用函数将新列添加到数据框

r - 如何标记R中特定行周围的任何值范围?

r - 通过匹配两列值来删除观测值