метод вставки для кадра данных - PullRequest
10 голосов
/ 03 ноября 2011

Я хотел бы ввести фрейм данных в вставку, и я бы хотел, чтобы вставка обрабатывала его так, как если бы я отдельно вводил столбцы этого фрейма.Причина, по которой я хотел бы это сделать, заключается в том, что я не уверен, сколько столбцов будет в моем фрейме данных.Здесь 2, но я бы хотел, чтобы общее решение имело дело с любым количеством столбцов.

Мой желаемый вывод - test1paste в следующем коде.Но я бы не хотел явно ссылаться на столбцы.Моя apply попытка понятным образом терпит неудачу, потому что она действует индивидуально на столбцы, однако я думаю, что она находит решение, которое я ищу.

> test1 <-
+ structure(c(42.71, 41.69, 46.95, 48.85, 45.26, 44.71, 43.71,
+ 42.69, 47.95, 49.85, 46.26, 45.71), .Dim = c(6L, 2L))
>
> test1paste <- paste(test1[,1],test1[,2], sep = "&")
> test1paste
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26"
[6] "44.71&45.71"
>
> apply(test1,MARGIN=2,paste,sep="&")
     [,1]    [,2]
[1,] "42.71" "43.71"
[2,] "41.69" "42.69"
[3,] "46.95" "47.95"
[4,] "48.85" "49.85"
[5,] "45.26" "46.26"
[6,] "44.71" "45.71"

Есть идеи?

Спасибо!

Ответы [ 2 ]

8 голосов
/ 03 ноября 2011

Если ваш «фрейм данных» на самом деле data.frame (а не matrix, как в вашем примере), вы можете использовать do.call напрямую:

testdf <- as.data.frame(test1)
do.call(paste, c(testdf, sep="&"))

Это зависит от того факта, что data.frame является прославленным list, а do.call принимает список аргументов. Я просто добавляю аргумент sep в список ...

Небольшое предостережение: если имя какого-либо столбца "sep" или "collapse", у вас могут возникнуть проблемы. Удаление имен столбцов поможет в этом случае:

do.call(paste, c(unname(testdf), sep="&"))
8 голосов
/ 03 ноября 2011

Как насчет этого:

> apply(test1,1,paste,collapse="&")
[1] "42.71&43.71" "41.69&42.69" "46.95&47.95" "48.85&49.85" "45.26&46.26"
[6] "44.71&45.71"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...