繁体   English   中英

R:从data.frame中打印出成对的值最简单的方法是什么?

[英]R: What's the easiest way to print out pairs of values from a 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

将每对值打印为这样的字符串列表的最简单方法是:

“ x1”,“ x2”,“ y1”,“ y2”

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

因此,速度的提高可见数千。
这是因为Shane的解决方案调用分别为每行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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM