2017-01-08 2 views
1

NA로 공백을 대체하고 싶습니다. 간단한 방법은 df[df == ""] <- NA 일 수 있으며, 이는 내 데이터 프레임의 대부분의 셀에서 작동합니다.공백 문자열을 R에서 NA로 바꿀 수 없습니다.

나는 다음과 같은 코드를 가지고 : 나는 약간의 공백이 인용 부호

df[11,1] [1] " "

사이에 약간의 공백이 있다고 생각

library(rvest) 
library(dplyr) 
library(tidyr) 

#Read website 
htmlpage <- read_html("http://www.soccervista.com/results-Liga_MX_Apertura-2016_2017-844815.html") 

#Extract table 
df <- htmlpage %>% html_nodes("table") %>% html_table() 
df <- as.data.frame(df) 

#Set whitespaces into NA's 
df[df == ""] <- NA 

것은 그래서 내 솔루션은 다음을 할 수 있었다 : df[df == " "] <- NA

그러나 문제는 여전히 남아 있으며 작은 공백이 있습니다! 나는 트림 기능이 작동 할 것이라고 생각했지만 그렇지 않았습니다 ...

#Trim 
df[,c(1:10)] <- sapply(df[,c(1:10)], trimws) 

그러나 문제는 해결할 수 없습니다.

아이디어가 있으십니까?

답변

4

우리는 대신 listmatrixlapply 대신 sapplysapply로 수익을 사용해야하고이 따옴표 문제를 만들 수 있습니다.

df[1:10] <- lapply(df[1:10], trimws) 

우리가 " " 같은 공간이있는 경우 다른 옵션은 "" NA

df[df == ""] <- NA 

을 변경 한 후 ""

df[1:10] <- lapply(df[,c(1:10)], function(x) gsub("^\\s+|\\s+$", "", x)) 

로 그 공백을 대체 할 gsub를 사용하는 것입니다 또는 대신 두 교체를하고, 우리는이 사람이 가서 classtype.convert

df[] <- lapply(df, function(x) 
     type.convert(replace(x, grepl("^\\s*$", trimws(x)), NA), as.is = TRUE)) 

주를 변경 할 수 있습니다 : 모든 열이

+1

환상적인를 반복 할 때 우리는 열 인덱스를 지정할 필요가 없습니다! 사프리가 따옴표에 문제가 있음을 알지 못했습니다. 또한 마지막 솔루션 인'type.convert'도 놀랍습니다. 위대하고 감사합니다! @akrun – user44049

+1

그런데 왜 마지막 솔루션에서만'df' 대신'df []'를 사용 했습니까? @akrun – user44049

+0

@ user44049 첫 번째 두 경우가 눈에 띄면 대괄호 안에 'df [1:10]'즉 1:10이됩니다. 우리는 첫 번째 열 10 개를 서브 셋팅하고 그것들을 갱신한다. 비슷하게'[] '를 사용하여 모든 열을 선택한다. '[] '를 사용하는 이유는 출력에 원래의 데이터 세트와 동일한 구조를주는 것입니다.'lapply'가'list'를 반환한다는 것을 기억하십시오. – akrun

관련 문제