内の値を再配置し、作るためにいくつかのマイナーな修正を持ってElegently ...私はPDFのテキストレイヤーで働いているデータフレーム
私が生成したデータフレームきちんとオフになっている1つのまたは2つのデータ値を持っています一列で私は間違って配置された値(他の変数の組み合わせによって定義される)の '座標'を持ち、実際にどこに行くべきかの位置を持っています。この中に、
data.frame(A = 1:3,
B = 1:3,
C = c("Oops wrong row", NA, "this one is OK"))
:
変更これ:私はAからBにデータ値を移動し、例えばAに対応する行をフィルタリングする必要が
data.frame(A = 2:3,
B = 2:3,
C = c("Oops wrong row", "this one is OK"))
Iがきこれを達成するためにいくつかのコードを書いた。しかし、それははるかに冗長である必要があるようです。また、この例では、関数はデータフレームの付随的な機能に依存しているようです。私はこれが一般的な仕事かもしれないと思った - この種の仕事のための標準的なパターンがあるか?または少なくともよりエレガントなアプローチですか?
df <- data.frame(A = 1:3,
B = 1:3,
C = c("Oops wrong row", NA, "this one is OK"))
get_row <- function(df, A, B, output = "index") {
index <- which(df[["A"]] == A & df[["B"]] == B)
if (output == "index") {
return(index)
}
else if (output == "C") {
return(df[["C"]][[index]])
}
}
correct_df <- function(df) {
from <- list(A = 1,
B = 1)
to <- list(A = 2,
B = 2)
df <- df %>%
dplyr::mutate(C = replace(C,
get_row(., to[["A"]], to[["B"]]),
get_row(., from[["A"]], from[["B"]],
output = "C"))) %>%
dplyr::filter(A != from[["A"]] | B != from[["B"]])
return(df)
}