アンケートへの回答を含む大きなデータフレームがあります。私の最小限の作業例(以下)には、3つの質問への回答と、回答が得られる質問票への回答の遅れがあります。
df <- data.frame(ID = LETTERS[1:10],
Q1 = sample(0:10, 10, replace=T),
Q2 = sample(0:10, 10, replace=T),
Q3 = sample(0:10, 10, replace=T),
Delay = 1:10
)
3を超える遅延で応答をNAに変更したいと思います。私はこれを1つの質問で簡単に達成できます。
df %>%
mutate(Q1 = ifelse(Delay >3, NA, Q1))
それは私に
ID Q1 Q2 Q3 Delay
1 A 5 6 9 1
2 B 8 1 5 2
3 C 8 4 6 3
4 D NA 7 1 4
5 E NA 8 10 5
6 F NA 9 4 6
7 G NA 1 6 7
8 H NA 8 9 8
9 I NA 9 1 9
10 J NA 5 7 10
代わりに、1つのステートメントで3つの質問すべてに対してこれを実行したいと思います(私の実際の問題では、20を超える質問があるため、各質問を個別に実行するのは面倒です)。したがって、私は質問のベクトルを作成します。
q_vec <- c("Q1", "Q2", "Q3")
次に、次のような以前のコードのバリアントを試しました
df %>%
mutate(all_of(q_vec) = ifelse(Delay >3, NA, ~))
しかし、何も機能しませんでした。これの正しい構文は何ですか?
よろしくお願いします
トーマスフィリップス
使用できますacross
:
library(dplyr)
q_vec <- c("Q1", "Q2", "Q3")
df %>% mutate(across(all_of(q_vec), ~ifelse(Delay >3, NA, .)))
# ID Q1 Q2 Q3 Delay
#1 A 1 5 0 1
#2 B 9 9 6 2
#3 C 5 7 1 3
#4 D NA NA NA 4
#5 E NA NA NA 5
#6 F NA NA NA 6
#7 G NA NA NA 7
#8 H NA NA NA 8
#9 I NA NA NA 9
#10 J NA NA NA 10
またはベースR:
df[q_vec][df$Delay > 3, ] <- NA
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加