преобразовать имена переменных строки фрейма данных - PullRequest
1 голос
/ 06 декабря 2011

У меня есть фрейм данных, который содержит даты и идентификаторы.Мне нужно добавить несколько столбцов в этот фрейм данных на основе каждой даты.Я использую ddply, чтобы сделать это следующим образом:

ddply(df, "dt", transform, new_column1 = myfun(column_name_1))

Однако у меня есть несколько имен столбцов, и я хотел бы добавить несколько новых столбцов.Есть ли способ, которым я могу передать строку для преобразования вместо new_column1?Например, я попытался:

ddply(df, "dt", transform, get("some_column_name")=myfun(column_name_1))

, но это не работает.Кроме того, если я передам column_name_1 myfun в виде строки, могу ли я просто использовать get("column_name_1") в myfun для ссылки на столбец?

ОБНОВЛЕНИЕ: НЕ УВЕРЕН, КАКФОРМАТИРУЙТЕ ЭТО ЛУЧШЕ

input:
id    date    val
id1   d1      1
id2   d1      2
id3   d1      3
id4   d1      4
id1   d2      10
id2   d2      20
id3   d2      30
id4   d2      40

out (например, для 2 ведер)

id    date    val     bucket
id1   d1      1         1
id2   d1      2         1
id3   d1      3         2
id4   d1      4         2
id1   d2      10        1
id2   d2      20        1
id3   d2      30        2
id4   d2      40        2

1 Ответ

3 голосов
/ 06 декабря 2011

Делать это с transform приятно, но почему бы не что-то более простое, например

tmpf <- function(x) {
   x[[new_column_name_1]] <- myfun(x[[column_name_1]])
   x[[new_column_name_2]] <- myfun(x[[column_name_2]])
   ...
   x
}
ddply(df,"dt",tmpf)

Или вы можете изменить вектор имен столбцов или сделать это на лету:

tmpf <- function(x,cols=c("column_name_1","column_name_2")) {
   newcols <- paste("new",cols,sep="_")
   for (i in seq_along(cols)) {
      x[[newcols[i]]] <- myfun(x[[cols[i]]])
   }
}

Возможно, что-то еще умнее с assign в соответствующей среде.

Если бы у меня был воспроизводимый пример, я мог бы проверить это.

...