1

私は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」

4

3 に答える 3

6
apply(df, 1, paste, collapse="")
于 2010-03-21T21:51:11.837 に答える
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

したがって、速度の向上は数千人に見られます。
これは、シェーンのソリューションがpaste各行を個別に要求するためです。したがって、nrow(df)の呼び出しがありpasteます。私のソリューションでは、1つの呼び出しです。

于 2010-03-21T23:09:41.577 に答える
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
于 2019-07-05T19:18:41.243 に答える