R: Какой самый простой способ распечатать пары значений из data.frame? - PullRequest
1 голос
/ 22 марта 2010

У меня есть data.frame:

df<-data.frame(a=c("x","x","y","y"),b=c(1,2,3,4))

> df
      a b
    1 x 1
    2 x 2
    3 y 3
    4 y 4

Какой самый простой способ распечатать каждую пару значений в виде списка строк, например:

"x1", "x2", "y1", "y2"

Ответы [ 3 ]

6 голосов
/ 22 марта 2010
apply(df, 1, paste, collapse="")
5 голосов
/ 22 марта 2010
with(df, paste(a, b, sep=""))

И это должно быть быстрее, чем apply.

О времени

Для 10000 строк получаем:

df <- data.frame(
    a = sample(c("x","y"), 10000, replace=TRUE),
    b = sample(1L:4L, 10000, replace=TRUE)
)

N = 100
mean(replicate(N, system.time( with(df, paste(a, b, sep="")) )["elapsed"]), trim=0.05)
# 0.005778
mean(replicate(N, system.time( apply(df, 1, paste, collapse="") )["elapsed"]), trim=0.05)
# 0.09611

Так что увеличение скорости видно за несколько тысяч.
Это потому, что решение Шейна вызывает paste для каждой строки отдельно. Так что есть nrow(df) звонков paste, в моем решении один звонок.

0 голосов
/ 05 июля 2019

Также вы можете использовать библиотеку sqldf:

library("sqldf")
df<-data.frame(a=c("x","x","y","y"),b=c(1,2,3,4))
result <- sqldf("SELECT a || cast(cast(b as integer) as text) as concat FROM df")

Вы получите следующий результат:

  concat
1 x1
2 x2
3 y3
4 y4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...