R: ما هي أسهل طريقة لطباعة أزواج من القيم من البيانات. الإطار؟

StackOverflow https://stackoverflow.com/questions/2488853

  •  21-09-2019
  •  | 
  •  

سؤال

لدي بيانات. الإطار:

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

لذا فإن الزيادة في السرعة مرئية لبضع آلاف.
هذا لأن حلول شين 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 مع الإسناد
لا تنتمي إلى StackOverflow
scroll top