この問題は私を困惑させました。dplyr 'オブジェクトが見つかりません'中央値のみ
私は、次のデータフレームを持っている:
library(dplyr)
# approximation of data frame
x <- data.frame(doy = sample(c(seq(200, 300)), 20, replace = T),
year = sample(c("2000", "2005"), 20, replace = T),
phase = sample(c("pre", "post"), 20, replace = T))
と、単純な変数としてカラム名を取り込み機能「をまとめたもの」と、うまく動作します。しかし
getStats <- function(df, col) {
col <- as.name(col)
df %>%
group_by(year, phase) %>%
summarize(n = sum(!is.na(col)),
mean = mean(col, na.rm = T),
sd = sd(col, na.rm = T),
se = sd/sqrt(n))
}
> getStats(x, "doy")
Source: local data frame [4 x 6]
Groups: year [?]
year phase n mean sd se
<fctr> <fctr> <int> <dbl> <dbl> <dbl>
1 2000 post 8 248.625 30.42526 10.75695
2 2000 pre 2 290.000 14.14214 10.00000
3 2005 post 5 231.400 32.86031 14.69558
4 2005 pre 5 274.200 29.79429 13.32441
、I場合関数を修正して中央値を取得すると、エラーが返されます。
getStats <- function(df, col) {
col <- as.name(col)
df %>%
group_by(year, phase) %>%
summarize(n = sum(!is.na(col)),
mean = mean(col, na.rm = T),
med = median(col, na.rm = T), # new line
sd = sd(col, na.rm = T),
se = sd/sqrt(n))
}
> getStats(x, "doy")
Error in median (doy, na.rm = TRUE): object "doy" not found
名前と位置は変更されますが、すべて同じ結果が得られます。 'median'は、渡された変数として列名を受け入れません。私は何かを欠いていると思うので、基本的に私は誰かが私にそれを指摘するときに顔の手のひらをするだろうが、その間に私は私の正気を失っているように感じる。私は洞察力に感謝します!いずれにおいても
...つまり
これはあなたに別のグループ化を行うにはより多くの柔軟性を提供し、別の場所で
getStats
をオフに破ります私自身がこの解決法を思いついたとは思っていませんでした。雷が速く、徹底的で、役立つ答えをありがとう。同じ問題を扱う人にとって、 'deparse'行を削除すると、上記の関数は文字列変数を扱うことができることに注意してください。すなわち、 'getStats(data、colName)'、 'colName < - " doy "' – Jaywalker