2つの変数があります。MARKSV1201およびMARKSVA1201。MARKSVA1201は、MARKSV1201が欠落している場合にのみ関連します。そうでない場合、分析が混乱するだけです。
MARKSV1201の値が記録されるたびにMARKSVA1201を「0」に設定するスクリプトを作成しようとしています
if(!is.na(test$`MARKSV1201 `)){test$`MARKSVA1201 `=0}
これは機能していないようですが、プログラムは「条件が> 1であり、最初の要素のみが使用される」と文句を言います。
ベクトルを使用しているので、代わりにifelseステートメントを使用してみます。
ifelse(!is.na(test$`MARKSV1201 `),test$`MARKSVA1201 `,test$`MARKSVA1201 `==test$'MARKSVA1201 ')
これは機能しているようですが、論理ベクトルしか取得していません。
条件付きで実際の値を変更するにはどうすればよいですか?
データのスナップショット:
structure(list(`MARKSV1201 ` = structure(c(NA, NA, 8L, 8L,
NA, 8L, NA, 6L, 8L, 6L, 6L, 6L, 8L, 6L, 8L, 6L, 6L, 8L, 6L, 6L,
NA, 8L, 8L, 7L, 7L, 8L, NA, 8L, 6L, 8L, NA, 6L, 8L, 6L, 8L, 8L,
NA, NA, NA, NA, NA, NA, NA, 6L, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA), .Label = c("A ", "B ", "C ",
"D ", "E ", "G ", "MVG", "VG "), class = "factor"), `MARKSVA1201 ` = structure(c(NA,
NA, NA, NA, NA, NA, 6L, NA, NA, NA, NA, NA, NA, 6L, NA, NA, NA,
NA, NA, NA, 6L, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), .Label = c("A ",
"B ", "C ", "D ", "E ", "G ", "MVG", "VG "), class = "factor")), row.names = c(1L,
5L, 9L, 12L, 15L, 18L, 21L, 24L, 27L, 30L, 34L, 37L, 43L, 46L,
50L, 53L, 59L, 62L, 65L, 68L, 71L, 74L, 80L, 83L, 86L, 89L, 92L,
98L, 101L, 104L, 107L, 110L, 113L, 116L, 119L, 122L, 125L, 128L,
134L, 137L, 140L, 146L, 149L, 155L, 161L, 167L, 170L, 173L, 176L,
182L, 185L, 188L, 191L, 195L, 198L, 201L, 204L, 207L, 213L, 216L,
219L, 225L, 228L, 231L, 237L, 243L, 249L, 252L, 255L, 258L, 261L,
264L, 267L, 276L, 282L, 285L, 288L, 291L, 294L, 297L, 300L, 303L,
306L, 309L, 312L, 315L, 321L, 324L, 327L, 330L, 333L, 336L, 339L,
342L, 345L, 348L, 354L, 357L, 360L, 363L, 366L, 372L, 375L, 381L,
384L, 387L, 390L, 393L, 396L, 399L, 402L, 405L, 408L, 411L, 414L,
417L, 420L, 423L, 426L, 429L, 435L, 438L, 441L, 444L, 447L, 450L,
453L, 456L, 459L, 462L, 465L, 468L, 471L, 474L, 477L, 480L, 483L,
486L, 489L, 492L), reshapeWide = list(v.names = "QUAL_RATING",
timevar = "SEL_CRITERION", idvar = "PNR", times = structure(3:1, .Label = c("BI ",
"BII ", "HP "), class = "factor"), varying = structure(c("QUAL_RATING.HP ",
"QUAL_RATING.BII ", "QUAL_RATING.BI "), .Dim = c(1L, 3L
))), class = "data.frame")
これで今すぐ実行できます。
#rename the columns for convenience
names(df) <- c("MARKSV1201", "MARKSVA1201")
# coerce the df to char
df[] <- lapply(df, as.character)
# Use the ifelse
df$MARKSVA1201 <- ifelse(!is.na(df$MARKSV1201), 0, df$MARKSVA1201)
# coerce it back to its original factor
df[] <- lapply(df, as.factor)
#output
# Marksv1201 MARKSVA1201
# 1 <NA> NA
# 5 <NA> NA
# 9 VG 0
# 12 VG 0
# 15 <NA> NA
# 18 VG 0
# df
# MARKSV1201 MARKSVA1201
# 1 <NA> <NA>
# 5 <NA> <NA>
# 9 VG <NA>
# 12 VG <NA>
# 15 <NA> <NA>
# 18 VG <NA>
を使用str(df)
して構造をチェックし、変数のクラスを調べて、必要に応じて前後に強制することができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加