2017-02-28 14 views
-1

の数値に他の行を変換し、次のように私は、文字列の一列を有するデータフレームを有する:コピーN/AとR

 colA 
1 Apples 
2 Bats 
3 Cats 
4 N/A 
5 Dogs and Pigs 
6 N/A 

Iが「N/Aのそれぞれをコピーしたいです"新しい列の同じ行への項目をNA、colBとします。

df$colB = regmatches(df$colA, gregexpr("N/A", df$colA, perl=TRUE)) 

ありがとう:私は、私は次のコードに加えて、他の多くのことを試してみました0または1

数値であることをNAではない他のすべての行をしたいと思います。

+0

は、(1)あなたは、ベクター内の変数の型を混在させることはできません。 colBに文字列として "N/A"が含まれる場合、他の値(0または1)も文字列になります。 (2) "数値0または1"の意味がはっきりしない。それが0か1かを決定するものは何ですか?または、すべて0、またはすべて1を意味しましたか? (3)d.bによるコメント内のコードは、望ましい結果を与えません。 – neilfws

+0

申し訳ありませんが、私はNAと0またはNAと1が欲しいという意味でした。質問するときに変数型を混ぜるつもりはありませんでした。ありがとう。 – johncarter

答えて

2

あなたが他のすべてのために、 "N/A" のためのNAをしたいと0の場合は、ifelseを使用することができます。

df$colB <- ifelse(df$colA == "N/A", NA, 0) 
+0

これは美しく動作します。私は非常にすべての行をループするだけに近づいていたが、これははるかに速く動作します。ありがとう! – johncarter

+0

よろしくお願いします。 'ifelse'はtestと同じ形の値を返します。この場合、ベクトル(列)を比較してベクトルを返すので、動作しますが、この部分は混乱を招く可能性があります。 – neilfws

1

方法についてmatch()、少し策略。与え

df$colB <- NA^match(df$colA, "N/A", 0L) 

  colA colB 
1  Apples 1 
2   Bats 1 
3   Cats 1 
4   N/A NA 
5 Dogs and Pigs 1 
6   N/A NA 

オリジナルデータ:

df <- structure(list(colA = structure(c(1L, 2L, 3L, 5L, 4L, 5L), .Label = c("Apples", 
"Bats", "Cats", "Dogs and Pigs", "N/A"), class = "factor")), .Names = "colA", row.names = c("1", 
"2", "3", "4", "5", "6"), class = "data.frame") 
+0

私はこの解決策も好きです。ありがとう! – johncarter

関連する問題