Р:Какой самый простой способ распечатать пары значений из data.frame?
Вопрос
У меня есть 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
Какой самый простой способ распечатать каждую пару значений в виде списка таких строк:
«х1», «х2», «у1», «у2»
Решение
apply(df, 1, paste, collapse="")
Другие советы
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
, в моем решении это один вызов.
Кроме того, вы можете использовать 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
Не связан с StackOverflow