2012-03-30 3 views
1

같은 이름이지만 여러 데이터 프레임에서 시작되는 길이가 다른 열의 R에서 통계 분석을 일부 수행하려고합니다.목록의 데이터 프레임 열 편집 R

: 나는 'NA'에 의해 대체 단어 대신 숫자 "실패"를 포함 : (my.col는 말) 관심있는 칼럼의 일부 요소로, 지금

my.list <- list(df1, df2, df3, df4) 

: 나는 목록을 생성

for (i in 1:length(my.list)){ 
    for (j in 1:length(my.list[[i]]$my.col)){ 
     if (my.list[[i]]$my.col[j] %in% c("FAILED")) 
     {my.list[[i]]$my.col[j] <- 'NA'}; 
    } 
} 

저는 이것이이 문제에 대한 최선의 해결책은 아니지만 적어도 작동한다는 것을 확신합니다. 다른 열 (my.col이 아님)에 'NA'로 대체 된 유효하지 않은 요소 수준이 있다는 경고가 나옵니다. my.col보다 실제로 다른 열을 고려하는 이유는 알 수 없습니다. 개선을위한 제안은 높이 평가됩니다.

이제 나머지 숫자에는 점 대신 십진수 쉼표가 포함됩니다. "dec =", ""을 사용하여 .csv 파일을 가져 오는 동안이 문제를 없애려고했지만 번호가 아닌 다른 항목 (예 : 'FAILED')이 포함 된 열은 제대로 작동하지 않습니다. 그래서 저는 쉼표를 대신 써야합니다. 그리고 이것은 저에게 맞지 않습니다. 나는 시도했다 :

for (i in 1:length(my.list)){ 
     as.numeric(gsub(",", ".", my.list[[i]]$my.col)) 
} 

이것은 오류가 아니지만, 아무런 변화도주지 않는다.

as.numeric(gsub(",", ".", my.list[[4]]$my.col)) 

목록의 네 번째 요소에 대해 수행 할 작업을 수행합니다. 내 관점에서 볼 때 둘 다 동일해야합니다. 이게 뭐가 문제 야?

Btw, 나는 다른 분석을 위해 나중에 필요할지도 모르기 때문에 데이터 프레임에서 다른 열을 삭제하지 않는 것을 선호합니다.

+1

gsub는 수정 된 표현식을 반환하므로, 다음과 같이 지정해야합니다. my.list [[i]] $ my.col <- as.numeric (gsub (",", ".", my.list [ i)] $ my.col))' – smu

+0

재현 가능한 예제는 훌륭합니다 (즉, R에 내장 된 데이터를 사용하거나 자신의 데이터를 제공하는 것). –

+0

@smu : 고마워,이 작품! – AnjaM

답변

1

plyr 패키지를 사용하면이 작업을 효율적으로 수행 할 수 있습니다.

이 예에서는 내장 된 홍채 데이터를 사용합니다. "FAILED"를 NA로 바꾸는 대신 "versicolor"값을 바꿨습니다. 코마를 마침표로 바꾸는 대신 s를 w로 바꿨습니다.

my.list <- list(iris, iris) 

library(plyr) 

my.list<-llply(.data=my.list, 
       function(x) { x$Species<-as.character(x$Species) 
          x$Species[x$Species=="versicolor"]<-"NA" 
          x$Species<-gsub(pattern="s", 
              replacement="w", 
              x=x$Species) 
          x$Species<-as.factor(x$Species) 
          return(x) 
       }) 

as.character

는 인자 수준을 추가하는 문제를 회피 할 수있는 방법의 예로서 첨가 하였다. as.factor는 열이 새로운 수준의 요소로 반환되도록 보장합니다.

이렇게하면 목록에서 data.frame으로 유연하게 변환 할 수 있습니다. 단순히 llply를 ldply로 바꾸십시오.

+0

감사합니다. 이것은 완벽하게 작동하며 두 단계를 결합합니다! 이 패키지를 자세히 살펴볼 것입니다. 내가 이해할 수없는 유일한 이유는 원래 "my.col"이 원래 "factor"클래스를 갖고 있기 때문에 my.col이 요소 인 요소 ("invalid factor level, 생성 된 NA "). 코드를 적용하기 전에 요인을 제거 (또는 요인을 문자로 변경)하는 것이 합리적입니까? 아니면 실제로 중요하지 않습니까? – AnjaM

+0

@ user1003358, 수정 된 응답 참조. –

+0

아, 좋아, 이제 작동, 많이 고마워요 !!! – AnjaM