2010-02-24 3 views
3

여러 개의 다른 data.frames를 결합하여 만든 serial_to_plot.df라는 data.frame이 있습니다 (아래 참조). 이제 각각의 .mm 열을 꺼내서 그 (것)들을 그릴 수 있습니다. 그래서 각 data.frame (예 : p3c3.mm, p3c4.mm 등 ...)의 3 번째 열을 제거하고 싶습니다. 그러나 루핑하지 않고 객체의 모든 data.frames에 대해이를 수행하는 방법을 볼 수 없습니다. 이름. 이것이 가능한가?data.frame에서 data.frame의 열을 참조하는 방법은 무엇입니까?

나는 한 세트 만 꺼낼 수 있습니다. 예 : series_to_plot.df [[3]] 그리고 series_to_plot.df [[10]] (벡터의 목록 일뿐입니다.)로 직접 참조 할 수 있습니다. series_to_plot.df $ p3c3.mm으로 직접 참조 할 수 있지만 명령을 사용하여 각 data.frame에서 모든 mm을 포함하는 벡터를 가져 옵니까? 나는 일이 같은 인덱스 뭔가를 기다리고 있었다 : series_to_plot.df [,] 3 3]하지만이 [.data.frame 오류를 반환 (series_to_plot.df를, 3 [3]) : 정의되지 않은 컬럼에

series_to_plot.df 
      p3c3.rd   p3c3.day p3c3.mm  p3c3.sd     p3c3.n p3c3.noo p3c3.no_NAs 
    1  2010-01-04    0 0.1702531 0.04003364    7    1   0 
    2  2010-01-06    2 0.1790594 0.04696674    7    1   0 
    3  2010-01-09    5 0.1720404 0.03801756    8    0   0 

      p3c4.rd   p3c4.day p3c4.mm  p3c4.sd     p3c4.n p3c4.noo p3c4.no_NAs 
    1  2010-01-04    0 0.1076581 0.006542157    6    2   0 
    2  2010-01-06    2 0.1393447 0.066758781    7    1   0 
    3  2010-01-09    5 0.2056846 0.047722862    7    1   0 

      p3c5.rd   p3c5.day p3c5.mm  p3c5.sd     p3c5.n p3c5.noo p3c5.no_NAs 
    1  2010-01-04    0 0.07987147 0.006508766    7    1   0 
    2  2010-01-06    2 0.11496167 0.046478767    8    0   0 
    3  2010-01-09    5 0.40326471 0.210217097    7    1   0 
+0

series_to_plot.df는 데이터 프레임입니까? 내가 귀하의 의견을 읽고 그것이 데이터 프레임의 번호를 포함하는 목록이나 벡터인지 궁금하네요 출력물을 봐. 출력 결과가 3 행마다 표시되고 행 번호가 다시 시작되는 이유가 확실하지 않습니다. 구조체를 테스트하려면 str (series_to_plot.df) –

+0

감사합니다. 네, 그것은 data.frame이었습니다. 그것은 다른 data.frame 안에 data.frames 집합이었습니다. 하지만 당신은 정확합니다, 이것은 최고의 데이터 구조가 아닙니다, 나는 여기에 최고의 구조에 대한 힌트를 발견했습니다 : http : // stackoverflow.com/questions/1181060/reshaping-time-series-data-wide-to-formatting-for-plotting – John

답변

2

는 다른 답변에 추가하려면 나는 변수 이름으로 인코딩 유용한 정보를 가지고 좋은 아이디어라고 생각하지 않습니다. 모든 유용한 정보가 일부 변수의 값에 있도록 데이터를 재 배열하는 것이 훨씬 좋습니다. 나는 올바른 형식을 제안하는 데이터 집합에 대해 충분히 모르겠지만, 뭔가 당신이 당신의 질문이 답을 수행하면

p c   rd day date mm sd ... 
3 3 2010-10-04 ... 

처럼하면 간단 df$mm 될 수 있습니다. 외부 소스로부터 덜 유용한 형태로 데이터를 가져 오는 경우

, 당신은 reshape 패키지에서 reshape 기능 또는 기능을 사용하여 R 내에서 위와 같이 더 유용한 형태를 재 배열 할 수 있습니다.

+0

나는 내 대답에도 그것을 제안했지만,''pxcy'는 부분적인 data.frame (rbind/cbind 항목)의 이름이라고 가정했습니다. 그러나 새로운 열로 이름의 일부를 포함하는 힌트는 매우 좋습니다. – Marek

+0

감사합니다. 녹아서 모양을 바꿀 것입니다 ... (http://stackoverflow.com/questions/1181060/reshaping-time-series-data-from-wide-to-tall-format-for-plotting 참조) – John

4

를 선택 당신이 할 수있는 지정된 이름을 가지는 모든 열을 얻을 :

names_with_mm <- grep("mm$", names(series_to_plot.df), value=TRUE) 
series_to_plot.df[, names_with_mm] 

을하지만 기지 data.frame이의 모두 같은 구조를 가지고있는 경우 다음을 rbind 수, 뭔가 같은 :

series_to_plot.df <- rbind(
    cbind(name="p3c3", p3c3), 
    cbind(name="p3c4", p3c4), 
    cbind(name="p3c5", p3c5) 
) 

그런 다음 mm 값이 하나의 열에 있고 그 값을 쉽게 나타낼 수 있습니다.

1

R Language Definition에는 색인 생성 (초 3.4.1)에 대한 유용한 정보가있어 매우 유용합니다.

그런 다음 grep() 명령을 사용하여 시퀀스와 일치하는 이름을 가져올 수 있습니다. 함께 같은 그런 캐릭터 다 :

namesThatMatch <- grep("[mm]", names(series_to_plot.df) 

그런 다음 우리가 전화를 그 목록을 사용

dataWithMM <- series_to_plot.df[,grep("[P]", names(series_to_plot.df))] 

이 조금을 해체하려면, 이것은 "mm"패턴과 일치하는 열의 수를 가져옵니다 열이 우리가 원하는 :

dataWithMM <- series_to_plot.df[, namesThatMatch ] 
+0

마렉의 대답은 내 것보다 나은 정규식을가집니다. "[mm]"은 아무 곳에서나 "mm"이있는 열과 일치합니다. "mm $"은 "mm"으로 끝나는 열만 일치하므로 더 잘 맞을 수 있습니다. –

관련 문제