List R:What';从data.frame打印成对值的最简单方法是什么?

List R:What';从data.frame打印成对值的最简单方法是什么?,list,r,dataframe,List,R,Dataframe,我有一个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 df a b 1 x 1 2x2 3 y 3 4 y 4 将每对值打印为字符串列表的最简单方法是什么: “x1”、“x2”、“y1”、“y2” 这应该比应用更快 关于计时的问题 对于10000行,我们得到: df <- data.fr

我有一个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
df
a b
1 x 1
2x2
3 y 3
4 y 4
将每对值打印为字符串列表的最简单方法是什么:

“x1”、“x2”、“y1”、“y2”

这应该比应用更快

关于计时的问题

对于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
df
这应该比应用
更快

关于计时的问题

对于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

df此外,您还可以使用
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")

此外,您还可以使用
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")

我怀疑速度会明显不同,除非有数以百万计的行。@hadley我的解决方案是矢量化的,这意味着更好的性能。我怀疑速度会明显不同,除非有数以百万计的行。@hadley我的解决方案是矢量化的,这意味着更好的性能。
  concat
1 x1
2 x2
3 y3
4 y4