Как разделить кадр данных строками и затем обработать блоки?

Я не мог получить клавишу Alt, работающую ни один, но существует обходное решение, которое заставляет ее, по крайней мере, функционировать для навигации слова через клавиши управления курсором:

Пропуск к Следующему или Предыдущему Word в iTerm Используя Высокий звук / Опция + Левые или правые Клавиши со стрелками

10
задан jogo 27 December 2015 в 12:14
поделиться

5 ответов

Другой вариант - использовать функцию ddply из библиотеки ggplot2 . Но вы упомянули, что в основном хотите построить график зависимости пика от года, поэтому вы также можете просто использовать qplot :

A <- read.table("example.txt",header=TRUE)
library(ggplot2)
qplot(peak,year,data=A,colour=site,geom="line",group=site)
ggsave("peak-year-comparison.png")

alt text

С другой стороны, мне нравится решение Дэвида Смита, которое позволяет применять функция должна выполняться на нескольких процессорах.

12
ответ дан 3 December 2019 в 13:27
поделиться

Вы можете использовать isplit (из пакета "итераторы") для создания объекта-итератора, который перебирает блоки, определенные столбцом сайта :

require(iterators)
site.data <- read.table("isplit-data.txt",header=T) 
sites <- isplit(site.data,site.data$site)

Затем вы можете использовать foreach (из пакета «foreach») для создания графика внутри каждого блока:

require(foreach)
foreach(site=sites) %dopar% {
 pdf(paste(site$key[[1]],".pdf",sep=""))
 plot(site$value$year,site$value$peak,main=site$key[[1]])
 dev.off()
}

В качестве бонуса, если у вас есть многопроцессорный компьютер и вы сначала вызываете registerDoMC () (из пакета "doMC"), циклы будут выполняться параллельно, что ускоряет работу. Подробнее в этой записи блога Revolutions: Блочная обработка кадра данных с помощью isplit

14
ответ дан 3 December 2019 в 13:27
поделиться

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

data <- read.table ("example.txt", header = TRUE)

by (data [, c ( 'год', 'пик')], data $ site, plot)

В выводе указано NULL , потому что это то, что возвращает график. Вы можете настроить графическое устройство на pdf, чтобы захватить весь вывод.

4
ответ дан 3 December 2019 в 13:27
поделиться

Вот что я сделал бы, хотя похоже, что у вас, ребята, это обрабатывается библиотечными функциями.

for(i in 1:length(unique(data$site))){
  constrainedData = data[data$site==data$site[i]];
  doSomething(constrainedData);
}

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

6
ответ дан 3 December 2019 в 13:27
поделиться

Кажется, я припоминаю, что старый добрый split () имеет метод для data.frames, так что split (data, data $ site) создаст список блоков. Затем вы можете работать с этим списком, используя sapply / lapply / для .

split () также хорош из-за unsplit () ,

10
ответ дан 3 December 2019 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: