行ごとに無効な値をカウントする簡単な方法を探しています。例として、データフレームを次に示します。
data <- data.frame("c1" = c(1,1,3,0,2,2,3,1,2,9),
"c2" = c(2,2,3,4,1,2,1,2,1,2),
"c3" = c(2,3,3,4,3,3,3,3,2,9),
"c4" = c(4,4,0,0,1,0,3,0,3,9),
"c5" = c(9,1,2,3,2,1,2,3,2,1))
リストで定義された有効な値に対応しない値の数をケースごとに表示する追加の数値列が必要です。たとえば、このリストは次のようになります。
valid <- list("c1" = c(1:4,9),
"c2" = c(1:3,9),
"c3" = c(2:4,9),
"c4" = c(0:3,9),
"c5" = c(1:3,9))
したがって、この例で探している列は次のようになります。
data$invalid <- c(1,1,0,2,0,0,0,0,0,0)
私はきちんとした解決策を好みます。さまざまなpurrr :: map関数を少し試してみましたが、残念ながら実用的な解決策が見つかりませんでした。役立つヒントを事前に感謝します。
でbase R
、使用できますMap
data$invalid <- unlist(Map(function(x, y)
sum(!x %in% y), data, valid[names(data)]))
またはと purrr
library(purrr)
library(dplyr)
imap_int(data, ~ sum(!.x %in% valid[[.y]])) %>%
mutate(data, invalid = .)
更新された投稿に基づく
data$invalid <- Reduce(`+`, lapply(names(valid),
function(nm) Reduce(`&`, lapply(valid[[nm]], function(x) data[[nm]] != x))))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加