2つの列を結合するときに直面する問題を扱う非常に面白い方法を思いつきましたが、私がしたことをより効率的に行う方法が必要です。 Rの初心者のための提案は非常に高く評価されるだろう。数値ベクトルでのNAの扱いと変換の使用
私は長年に渡って、コードと位置の2つの列を持っています。 2004年のデータにはコードと場所が分かれていますが、2012にはコードと場所が結合されており、コード列は空のままです。最初にデータを標準化する必要があるので、code_locationという1つの列には、すべての観測でコードと位置が結合されています。さらに2つの列が作成されます。ここ
データである:
df <- read.table(text = c("
observation year code location
1 2004 23-940 town no. 1
2 2004 23-941 town no. 2
3 2012 NA 23-940 town no. 1
4 2012 NA 23-941 town no. 2"), header = TRUE)
私はそれをするためのコードと場所を組み合わせで働い
df_combined <- transform(df, code_location = paste(code, location, sep = " "))
2つの列を結合するために以下のコードでtransform
とpaste
を使用しようとしたが、 2004年の観測であるが、2012年の観測ではコード欄のNAsも含まれていた。 (NB、コードと場所の両方が数値ベクトルです。私は、この後が重要になり、正規表現を使用しています。私はNAを取り除くために、コード欄にas.character
を試してみましたが、それはその後、私の正規表現を台無しに。)
observation year code_location
1 2004 23-940 town no. 1
2 2004 23-941 town no. 2
3 2012 NA 23-940 town no. 1
4 2012 NA 23-941 town no. 2
これを回避するために、2つのデータフレームを作成し、code_locationを取得するために必要な作業を行い、データフレームを再度結合するために、どの観測でNAがあったのか、そうでなかったのかを教えてくれたsplit
というダミーを作成しました。ここに私のコードです:
df$cheat <- ifelse(is.na(df$code) == T, 0, 1)
ls_df <- split(df, df$cheat)
df_code <- ls_df[[2]]
df_na <- ls_df[[1]]
df_code <- transform(df_code, code_location = paste(code, location, sep = " "))
df_combined <- rbind(df_code, df_na)
そして私は私の所望の出力が、非常にラウンドアバウトで次の出力を取得。
observation year code_location
1 2004 23-940 town no. 1
2 2004 23-941 town no. 2
3 2012 23-940 town no. 1
4 2012 23-941 town no. 2