2014-07-05 3 views
0

데이터 프레임 목록에서 모든 NA 값을 제거하려고합니다. 내가 작동하도록하는 유일한 방법은 for 루프에서 complete.cases를 사용하여 데이터를 정리하는 것이다. 잠시 동안 아무 쓸데없이 노력하면서 lapply로 이것을하는 또 다른 방법이 있습니까? 다음은 작동하는 코드입니다.데이터 프레임 목록에 사용 된 Complete.cases

clean_data <- list() 
for (i in seq_along(id)) { 
    clean_data[[i]] <- data_in[[i]][complete.cases(data_in[[i]]), ] 
} 

하지만 제가이 작품은 lapply이 같은 모든 방법을 사용하여 고지 얻기 위해 노력을 :

나는

data_in <- lapply (file_name,read.csv) 

그런 다음이로 시작합니다. " [.default (XJ, 내가) 오류 : 유효하지 않은 첨자 형 '목록'"이 오류를 반환
comp <- lapply(data_in, complete.cases) 

clean_data <- lapply(data_in, data_in[[id]][comp,]) 

내가 알고 싶은 것은 몇 가지 대안 경우, 또는 나는이 권리에 대해 가고 있었다 . 그리고 마지막 예제가 효과가없는 이유는 무엇입니까?

감사합니다. 좋은 하루 되세요.

답변

2

na.omit 함께 할 것 어떻게 다음 몇 가지 작업 코드를 제공하십시오 무엇을

clean_data <- lapply(data_in, data_in[[id]][comp,]) 

예상하면 lapply에 두번째 파라미터에 대한 적절한 함수이어야 각 부재 data_in 목록은 한 번에 하나씩 전달됩니다. 귀하의 식 data_in[[id]][comp,]은 기능이 아닙니다. id이 어디서 온 것인지 잘 모르겠지만 lapply은 그런 마법의 변수를 만들지 않습니다. 또한이 시점에서 comp은 이제 색인의 목록 자체입니다. data_in 목록과 동기화하여이 목록을 반복 할 수 없습니다. 두 개의 별도의 단계에서 그것을 할 원한다면, 더 적절한 접근 방식은

comp <- lapply(data_in, complete.cases) 
clean_data <- Map(function(d,c) {d[c,]}, data_in, comp) 

가 여기에 우리가 동시에 data_incomp 목록을 반복 Map을 사용하는 것입니다. 그것들은 각각 매개 변수로서 함수에 전달되고 우리는 그런 식으로 적절한 추출을 할 수 있습니다. 그렇지 않은 경우 한 번에 할 수 있다면

clean_data <- lapply(data_in, function(x) x[complete.cases(x),]) 
+0

죄송합니다. id는 목록의 모든 세그먼트를 가리키는 벡터이므로 1:10과 비슷합니다. 그게 이드를 묘사하는 끔찍한 방법이라고 확신합니다 ... lapply로 내 문제를 지적합니다. –

+0

나는지도 함수를 사용한 적이 없거나 들어 본 적이 없으며 이제 이것에 대해 조사 할 것입니다. 도와 주셔서 감사합니다. 대단히 감사합니다. 귀하의 의견을 더 많이 연구 할 것이지만 귀하는 모든 제 질문에 답변 해 주셨습니다. –

3

환영 SO, 여기

이 (complete.cases은 논리적 반환 이후) 내가 잘 모르겠어요

(dat.l <- list(dat1 = data.frame(x = 1:2, y = c(1, NA)), 
       dat2 = data.frame(x = 1:3, y = c(1, NA, 3)))) 

# $dat1 
# x y 
# 1 1 1 
# 2 2 NA 
# 
# $dat2 
# x y 
# 1 1 1 
# 2 2 NA 
# 3 3 3 

Map(na.omit, dat.l) 

# $dat1 
# x y 
# 1 1 1 
# 
# $dat2 
# x y 
# 1 1 1 
# 3 3 3 
0

아래와 같은 의미입니까?

> lst 
$a 
    a 
1 1 
2 2 
3 NA 
4 3 
5 4 

$b 
    b 
1 1 
2 NA 
3 2 
4 3 
5 4 

$d 
    d e 
1 NA 1 
2 NA 2 
3 3 3 
4 4 NA 
5 5 NA 

> f <- function(x) x[complete.cases(x),] 
> lapply(lst, f) 
$a 
[1] 1 2 3 4 

$b 
[1] 1 2 3 4 

$d 
    d e 
3 3 3 
관련 문제