0
私はdplyr
への新加入者で、次の質問があります。 Myはdata.frame
の1つの列をグループ変数として扱います。一部の行はがグループに属していません。グルーピング列はNA
です。dplyr mutate():グループが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
通常の使用量はFYI、 'NA_integer_'組み込み定数です。 – Frank
@Frank全く同じ問題を解決しました。「同一(as.integer(NA)、NA_integer_)」と私は「普通」についてはあまりよく分かりません。 – tchakravarty
十分に公正です。 「いつも」とは、私が今までに見た唯一の方法を意味しています。 – Frank