Как ссылаться на столбцы data.frame внутри data.frame? - PullRequest
3 голосов
/ 24 февраля 2010

У меня есть data.frame с именем series_to_plot.df, который я создал, объединив несколько других data.frames вместе (показано ниже). Теперь я хочу вытащить только столбец .mm из каждого из них, чтобы я мог построить их. Поэтому я хочу вытащить 3-й столбец каждого data.frame (например, p3c3.mm, p3c4.mm и т. Д.), Но я не вижу, как это сделать для всех data.frames в объекте без циклического прохождения имя. Возможно ли это?

Я могу вытащить только один комплект: например, series_to_plot.df [[3]] и еще один series_to_plot.df [[10]] (так что это просто список векторов ..), и я могу напрямую ссылаться на series_to_plot.df $ p3c3.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

Ответы [ 3 ]

4 голосов
/ 24 февраля 2010

Чтобы получить все столбцы с указанным именем, вы можете сделать:

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 значения находятся в одном столбце, и его легче построить.

2 голосов
/ 25 февраля 2010

Чтобы добавить к другим ответам, я не считаю хорошей идеей иметь полезную информацию, закодированную в именах переменных. Гораздо лучше переставить ваши данные так, чтобы вся полезная информация была в значении какой-то переменной. Я не знаю достаточно о вашем наборе данных, чтобы предложить правильный формат, но это может быть что-то вроде

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

Как только вы это сделаете, ответ на ваш вопрос станет простым df$mm.

Если вы получаете данные в менее полезной форме из внешнего источника, вы можете переупорядочить их в более полезную форму, как указано выше в R, используя функцию reshape или функции из пакета reshape. *

1 голос
/ 24 февраля 2010

Определение языка R содержит полезную информацию об индексировании (с. 3.4.1), что очень полезно.

Затем вы можете получить имена, соответствующие последовательности, с помощью команды grep (). Затем соедините все это вместе так:

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

чтобы немного разобрать его, получим количество столбцов, которые соответствуют шаблону "мм":

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

Затем мы используем этот список для вызова нужных столбцов:

  dataWithMM <- series_to_plot.df[, namesThatMatch ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...