我有一个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”
答案 0 :(得分:6)
apply(df, 1, paste, collapse="")
答案 1 :(得分:5)
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
次来电,我的解决方案是一次通话。
答案 2 :(得分:0)
此外,您可以使用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