カスタム関数を使用してパイプのmutate文を使用しようとしています。私はこれを幾分似たように見たが、無駄にSO postを見た。R:データフレームの行をとり、整数を返す関数を使用して行ごとdplyr :: mutate
df <-
data.frame(exclude=c('B','B','D'),
B=c(1,0,0),
C=c(3,4,9),
D=c(1,1,0),
blob=c('fd', 'fs', 'sa'),
stringsAsFactors = F)
私は変数名を使用する機能は非常に一部基づいて選択した: は、私は(blob
が特定のタスクに関連しないいくつかの変数であるが、全体データの一部である)、このようなデータフレームがあるとexclude
列の値と、たとえばexclude
で指定されていない変数(常に1文字)の合計を計算します。どのように私を行う
FUN(df[1,])
:私はFUN
に単一の行(行1)を与えるとき
FUN <- function(df){
sum(df[c('B', 'C', 'D')] [!names(df[c('B', 'C', 'D')]) %in% df['exclude']])
}
は、私は、すなわち4 C
とD
(exclude
で言及されていないもの)は、予想される合計を取得します同様に、mutateを持つパイプで行います(結果を変数s
に追加します)。これらの二つの試みは動作しません:意図したとおりこれも動作しません
df %>% mutate(s=FUN(.))
df %>% group_by(1:n()) %>% mutate(s=FUN(.))
UPDATE:
:これが原因で動作しますが、dplyrさんのmutate内にない(パイプ)df %>% rowwise(.) %>% mutate(s=FUN(.))
df$s <- sapply(1:nrow(df), function(x) FUN(df[x,]))
例を挙げてください。これはうまくいかない: 'df%>%rowwise(。)%>%mutate(s = FUN(。))'。 @konvasからの答えは、幾分かっこいいです(@ konvasの提案を参考にしてください) – user3375672
申し訳ありませんが、誤解されています。%d>%rowwise(。)%>%mutate(s = FUN(data.frame(exclude = %nest(除外:D)%>%変異(s = map_dbl(データ、FUN)) %>%unnest() '問題は、「dplyr」はサブデータフレームではなく、列(すなわちベクトル)上で自然に動作することである。したがって、いくつかの追加のトリッキーが必要になります。 – Axeman
これは私が後にしているものです! (記録のためには 'tidyr :: nest()'と 'purrr :: map_dbl()')です。 – user3375672