отображение по строкам кадра данных

Предположим, что у меня есть кадр данных со столбцами c1..., cn, и функция f, который берет в столбцах этого кадра данных как аргументы. Как я могу применить f к каждой строке кадра данных для получения нового кадра данных?

Например,

x = data.frame(letter=c('a','b','c'), number=c(1,2,3))
# x is
# letter | number
#      a | 1
#      b | 2
#      c | 3

f = function(letter, number) { paste(letter, number, sep='') }

# desired output is
# a1
# b2
# c3

Как я делаю это? Я предполагаю, что это - что-то вроде {s, l, t} применяются (x, f), но я не могу понять это.

10
задан Brett 13 August 2010 в 21:33
поделиться

3 ответа

как указывает @greg, paste () может это сделать. Я подозреваю, что ваш пример упрощает более общую проблему. После того, как я боролся с этим в прошлом, , как показано в предыдущем вопросе, я в конечном итоге использовал пакет plyr для такого рода вещей. plyr делает НАМНОГО больше, но для этих вещей это просто:

> require(plyr)
> adply(x, 1, function(x) f(x$letter, x$number))
  X1 V1
1  1 a1
2  2 b2
3  3 c3

вы захотите переименовать выходные столбцы, я уверен

Итак, пока я набирал это, @joshua показал альтернативный метод, используя ddply . Разница в моем примере заключается в том, что adply обрабатывает фрейм входных данных как массив. adply не использует переменную «группировать по» row , созданную @joshua. Как он это делал, как и я, пока Хэдли не подсказал мне подход adply () . В вышеупомянутом вопросе.

11
ответ дан 3 December 2019 в 20:02
поделиться

Думаю, вы думали о чем-то подобном, но обратите внимание, что семейство функций apply не возвращает data.frames. Они также попытаются преобразовать ваш data.frame в матрицу перед применением функции.

apply(x,1,function(x) paste(x,collapse=""))

Возможно, вас больше заинтересует ddply из пакета plyr .

> x$row <- 1:NROW(x)
> ddply(x, "row", function(df) paste(df[[1]],df[[2]],sep=""))
  row V1
1   1 a1
2   2 b2
3   3 c3
1
ответ дан 3 December 2019 в 20:02
поделиться
paste(x$letter, x$number, sep = "")
7
ответ дан 3 December 2019 в 20:02
поделиться
Другие вопросы по тегам:

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