繁体   English   中英

dplyr mutate():如果group为NA,则忽略值

[英]dplyr mutate(): ignore values if group is NA

我是dplyr的dplyr ,有以下问题。 我有data.frame一列用作分组变量。 有些行属于组,分组NA

我需要使用dplyr函数mutate将一些列添加到data.frame中。 我希望dplyr忽略分组列等于NA所有行。 我将举一个例子说明:

library(dplyr)

set.seed(2)

# Setting up some dummy data
df <- data.frame(
  Group = factor(c(rep("A",3),rep(NA,3),rep("B",5),rep(NA,2))),
  Value = abs(as.integer(rnorm(13)*10))
)

# Using mutate to calculate differences between values within the rows of a group
df <- df %>%
  group_by(Group) %>%
  mutate(Diff = Value-lead(Value))

df
# Source: local data frame [13 x 3]
# Groups: Group [3]
# 
#     Group Value  Diff
#    (fctr) (int) (int)
# 1       A     8     7
# 2       A     1   -14
# 3       A    15    NA
# 4      NA    11    11
# 5      NA     0    -1
# 6      NA     1    -8
# 7       B     7     5
# 8       B     2   -17
# 9       B    19    18
# 10      B     1    -3
# 11      B     4    NA
# 12     NA     9     6
# 13     NA     3    NA

计算没有组的行之间的差异没有意义,并且正在破坏数据。 我需要删除这些行,并这样做:

df$Diff[is.na(df$Group)]  <- NA

有没有一种方法可以使用%>%将上述命令包含在dplyr链中? 行中的某处:

df <- df %>%
  group_by(Group) %>%
  mutate(Diff = Value-lead(Value)) %>%
  filter(!is.na(Group))

但是没有分组的行不能一起删除吗? 甚至更好的是,有没有一种方法可以使dplyr忽略没有组的行?

理想的结果将是:

# Source: local data frame [13 x 3]
# Groups: Group [3]
# 
#     Group Value  Diff
#    (fctr) (int) (int)
# 1       A     8     7
# 2       A     1   -14
# 3       A    15    NA
# 4      NA    11    NA
# 5      NA     0    NA
# 6      NA     1    NA
# 7       B     7     5
# 8       B     2   -17
# 9       B    19    18
# 10      B     1    -3
# 11      B     4    NA
# 12     NA     9    NA
# 13     NA     3    NA

只需对要创建的变量使用iflelse条件:

library(dplyr)
set.seed(2)

df = data.frame(
  Group = factor(c(rep("A",3), rep(NA,3), rep("B",5), rep(NA,2))),
  Value = abs(as.integer(rnorm(13)*10))
) %>% 
  group_by(Group) %>%
  mutate(Diff = ifelse(is.na(Group), as.integer(NA), Value-lead(Value)))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM