Для L oop по спецификации c Диапазон столбцов в R - PullRequest
0 голосов
/ 10 июля 2020

У меня есть широкий фрейм данных, состоящий из 1000 строк и более 300 столбцов. Первые 2 столбца - это поля GroupID и Category. Остальные столбцы представляют собой непрерывные числовые c измерения. Я хотел бы сделать l oop через определенный c диапазон этих столбцов в R, начиная с первого столбца numeri c (столбец № 3). Например, l oop через столбцы 3:10. Я также хотел бы сохранить имена столбцов в l oop. Я начал со следующего кода, используя

for(i in 3:ncol(df)){
  print(i)
} 

, но он включает все столбцы справа от столбца № 3 (не диапазон 3:10), и это не определяет имена столбцов. Может ли кто-нибудь помочь мне начать работу с этим l oop, чтобы я мог указать диапазон столбцов, а также сохранить имена столбцов? TIA!

Примечание: я использовал tidyr для сбора фрейма данных в длинном формате. Это работает, но я обнаружил, что это делает мой фрейм данных очень большим и, следовательно, занимает много времени и памяти в моем l oop.

Ответы [ 2 ]

1 голос
/ 10 июля 2020

Пока вы не включаете свои данные, я создал аналогичные фиктивные данные (1000 строк и 302 столбцов, 2 переменных идентификаторов), чтобы показать вам, как выбирать столбцы и готовиться к построению графика. :

library(reshape2)
library(ggplot2)
set.seed(123)
#Dummy data
Numvars <- as.data.frame(matrix(rnorm(1000*300),nrow = 1000,ncol = 300))
vec1 <- 1:1000
vec2 <- rep(paste0('class',1:5),200)
IDs <- data.frame(vec1,vec2,stringsAsFactors = F)
#Bind data
Data <- cbind(IDs,Numvars)
#Select vars (in your case 10 initial vars)
df <- Data[,1:12]
#Prepare for plot
df.melted <- melt(data = df,id.vars = c('vec1','vec2'))
#Plot
ggplot(df.melted,aes(x=vec1,y=value,group=variable,color=variable))+
  geom_line()+
  facet_wrap(~vec2)

В итоге вы получите такой сюжет:

введите описание изображения здесь

Надеюсь, это поможет.

0 голосов
/ 10 июля 2020

Вы можете сохранить имена столбцов, передав их в функцию lapply, вот пример с набором данных iris:

  lapply(names(iris)[2:4], function(columntoplot){

   df <- data.frame(datatoplot=iris[[columntoplot]])
  
   graphname <- columntoplot
  
    ggplot(df, aes(x = datatoplot)) +
    geom_histogram() +
    ggtitle(graphname)
  
  ggsave(filename = paste0(graphname, ".png"), width = 4, height = 4)
  
})

В функции lapply вы создаете новый набор данных, состоящий из одного столбца (обратите внимание на двойные скобки). Затем вы можете построить и при желании сохранить результат в функции (см. Строку ggsave). Затем вы можете использовать имя столбца в качестве заголовка графика, а также имя файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...