开发者

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

开发者 https://www.devze.com 2022-12-23 21:55 出处:网络
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

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

精彩评论

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