3
dplyrと関数を使用して、作成遅れ変数の関数を作成しようとしています。しかし、問題は私がの右側の変数名を引用符で囲まないことを見つけることができないことです。。dplyrのmutate関数の右側の変数名を引用符で囲まないでください
mutate(dt,
!!varname_t1 := !!varname_t0 # it does not work.
)
以下は実際の例です。
A.これは例のデータです。
df <- tibble(
a = sample(5)
)
# A tibble: 5 x 1
a
<int>
1 3
2 5
3 4
4 1
5 2
このようなデータを作成します。
df <- df %>% mutate(a2 = lag(a1))
# A tibble: 5 x 2
a1 a2
<int> <int>
1 3 NA
2 1 3
3 5 1
4 2 5
5 4 2
B.私は、関数を作成したが、それは動作しません。私は問題がこの行だと思う。右側に、引用符を付ける方法がわかりません。
!!varname_t1 := !!varname_t0
私の機能は次のとおりです。
lag1_mutate <- function(dt, varname, time) { # time here is "after"
# enquo
varname <- enquo(varname)
time1 <- enquo(time)
time0 <- time-1; time0 <- enquo(time0)
# create the name of variables
varname_t0 <- paste0(quo_name(varname), quo_name(time0))
varname_t1 <- paste0(quo_name(varname), quo_name(time1))
# check
print(varname_t0)
print(varname_t1)
# mutate
mutate(dt,
!!varname_t1 := !!varname_t0 # <-- problem, here
# !!varname_t1 := lag(!!varname_t0) # produced only NAs
)
}
実際の結果は次のとおりです。
lag1_mutate(df, a, 2)
[1] "a1"
[1] "a2"
# A tibble: 5 x 2
a a2
<int> <chr>
1 4 a1
2 1 a1
3 3 a1
4 2 a1
5 5 a1
ありがとう得られます
を使用!あなたの答えに基づいて、私は2から10の遅れた変数を作成するために以下のループを作成しました。しかし、動作しません。 "a2"変数ではなく "ai"変数のみを作成し、エラーを出します。関数(DT、VARNAME、時間){varname_t0 < - - paste0(代替 – aasungh
これは 'lag1_mutate <作品 - (I C中の(2:10)){lag1_mutate(DF、I) DF <}の (varname)、time-1); varname_t1 < - paste0(代替(varname)、時間); mutate(dt、!! varname_t1:= lag(!! rlang :: sym(varname_t0)))} '@aasungh – lukeA
これはとてもうまく動作します! :) – aasungh