У меня есть следующий образец данных о посещаемости бейсбольного матча:

team <- rep("SFG", 6)
attendance <- seq(1000:1005)
year <- c(2000, 2000, 2001, 2001, 2002, 2002)
dates <- as.Date(c("2000-01-01", "2000-01-02", "2001-01-03", "2001-01-04", "2002-02-05", "2002-03-06"))

df <- data.frame(team, attendance, year, dates)

Я хочу создать две новые колонки.

Первая - это простая двоичная переменная с именем «Opening_day», которая указывает (с помощью 1 или 0), является ли игра первой игрой года.

Второй будет называться «open_day_attendance» и будет содержать номер посещаемости этой первой игры. Другими словами, все ряды за 2000 год будут иметь посещаемость для этой первой игры года.

Если возможно, я бы хотел добиться этого с помощью dplyr и piping.

Спасибо!

РЕДАКТИРОВАТЬ: другие отметили, что это возможный повторяющийся вопрос, и хотя он в целом похож на упомянутый, большинство ответов на другой вопрос A) Не создавайте новый столбец в исходном наборе данных со значениями и B ) Не используйте dplyr и piping для достижения результата.

-1
Michael 13 Мар 2018 в 21:19

2 ответа

Лучший ответ

Это очевидный повторяющийся вопрос. Вы можете попробовать это:

library(data.table)
df <- data.table(team, attendance, year, dates)
df[,opening_day:=ifelse(dates==min(dates),1,0), by=year]
df[,opening_day_attendance:=attendance[dates==min(dates)], by=year]
1
JeanVuda 13 Мар 2018 в 18:25

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

require(doBy)
mins       <- summaryBy(dates ~ team, data = df, FUN = min, keep.names = TRUE)
mins$dates <- as.Date(mins$dates, origin = '1970-01-01')

> mins
  team      dates
1  SFG 2000-01-01

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

mins <- merge(mins, df, by = c('team', 'dates'), all.x = TRUE)

> mins
  team      dates attendance year
1  SFG 2000-01-01          1 2000
1
93i7hdjb 13 Мар 2018 в 18:27