开发者

R: What's the easiest way to print out pairs of values from a data.frame?

I have a 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

What's the easiest way to print out each pair of values as a list of strings like this:

开发者_JAVA技巧

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


apply(df, 1, paste, collapse="")


with(df, paste(a, b, sep=""))

And this should be faster than apply.

About timing

For 10000 rows we get:

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

So increase in speed is visible for few thousands.
It's because Shane's solution call paste for each row separately. So there is nrow(df) calls of paste, in my solution is one call.


Also, you can use sqldf library:

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")

You will get the following result:

  concat
1 x1
2 x2
3 y3
4 y4
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜