簡體   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