2017-02-28 30 views
-1

我有串的一行的數據幀如下:複製N/A到另一列和其他行轉換爲數值中的R

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

我想複製每個「N/A的「項目添加到新列中的同一行,即NA,colB。我想每隔一行,是不是NA必須是數字0或1

我曾嘗試下面的代碼加了很多其他的事情:

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

感謝。

+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

如果你想爲NA 「N/A」,0代表一切,你可以使用ifelse

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

這工作很好。我越來越接近循環遍歷所有的行,但是這個工作速度更快。謝謝! – johncarter

+0

好聽。請記住'ifelse'「返回一個與測試形狀相同的值。」在這種情況下,我們比較一個向量(列)並返回一個向量,所以它可以工作,但這方面可能會導致混淆。 – 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