2017-05-09 71 views
-1

我有一個從.csv讀取的調查數據的大數據框,看起來像這樣簡化後。r函數不會識別字符串中的撇號

x <- data.frame("q1" = c("yes","no","don’t_know"), 
      "q2" = c("no","no","don’t_know"), 
      "q3" = c("yes","don’t_know","don’t_know")) 

我想創建使用rowSums列如下

x$dntknw<-rowSums(x=="don’t_know") 

我能做到這一點對所有的yesno答案很容易,但在我的數據框只是生成用於don’t_know的零。 我以前有一個撇號看起來像這樣的問題don’t_know。我向read.table添加了encoding = "UTF-8"來解決這個問題。但是現在我似乎無法獲得任何R函數來識別它,我嘗試了gsub("’","",df),但是這並不像rowSums那樣工作。 這是編碼問題嗎?有沒有正則表達式的解決方案來消除它們?有什麼解決辦法來解決這個問題?

+0

它適用於我(使用德語區域設置) –

回答

1

這是一個編碼問題,而不是正則表達式。我無法重現此問題,並且我的編碼在R中設置爲UTF-8。嘗試通過將編碼設置爲UTF-8作爲默認R,而不是在讀取時。

這裏是我的示例輸出與您的代碼。

> x 
     q1   q2   q3 dntknw 
1  yes   no  yes  0 
2   no   no don’t_know  1 
3 don’t_know don’t_know don’t_know  3 

> Sys.setlocale() 
[1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8" 

下面是一些可能有用的細節。 https://support.rstudio.com/hc/en-us/articles/200532197-Character-Encoding

1

正如@Drj所述,這可能是一個編碼錯誤。當我是你的代碼粘貼到我的控制檯,我得到

> x$q1 
[1] yes    no    don<U+0092>t_know 

即使編碼是關閉的,你仍然可以使用正則表達式匹配它:

grepl("don.+t_know", x$q1) 
# [1] FALSE FALSE TRUE 

因此,你可以計算行總和如下:

​​

導致

> x 
       q1    q2    q3 dntknw 
1    yes    no    yes  0 
2    no    no don<U+0092>t_know  1 
3 don<U+0092>t_know don<U+0092>t_know don<U+0092>t_know  3