কীভাবে কোনও আর ডেটা ফ্রেমে সারি যুক্ত করা যায়


121

আমি স্ট্যাকওভারফ্লো প্রায় দেখেছি, তবে আমি আমার সমস্যার সাথে সম্পর্কিত কোনও সমাধান খুঁজে পাচ্ছি না, যার মধ্যে একটি আর ডাটা ফ্রেমে সারি যুক্ত করা জড়িত।

আমি নীচে খালি 2-কলামের ডেটা ফ্রেম শুরু করছি।

df = data.frame(x = numeric(), y = character())

তারপরে, আমার লক্ষ্য হ'ল মানগুলির তালিকার মাধ্যমে পুনরাবৃত্তি করা এবং প্রতিটি পুনরাবৃত্তিতে তালিকার শেষে একটি মান সংযোজন করা। আমি নিম্নলিখিত কোড দিয়ে শুরু করেছি।

for (i in 1:10) {
    df$x = rbind(df$x, i)
    df$y = rbind(df$y, toString(i))
}

আমিও ফাংশন চেষ্টা c, appendএবং mergeসাফল্য পায়নি। যদি আপনার কোন পরামর্শ থাকলে দয়া করে।


2
আমি কীভাবে আর ব্যবহার করা হচ্ছে তা জানার জন্য অনুমান করি না, তবে আমি অতিরিক্ত কোডের লাইনটি উপেক্ষা করতে চেয়েছিলাম যা প্রতিটি পুনরাবৃত্তিতে সূচকগুলি আপডেট করার প্রয়োজন হবে এবং আমি সহজেই ডেটা ফ্রেমের আকারটি বানাতে পারি না কারণ আমি ডন করি না চূড়ান্তভাবে এটি কত সারি নেবে তা জানি না। মনে রাখবেন যে উপরেরটি কেবল একটি খেলনার উদাহরণ যা পুনরুত্পাদনযোগ্য হতে বোঝায়। যেভাবেই হোক, আপনার পরামর্শের জন্য ধন্যবাদ!
জ্ঞান বেদ

উত্তর:


115

হালনাগাদ

আপনি কী করার চেষ্টা করছেন তা অবগত না করে আমি আরও একটি পরামর্শ ভাগ করব: প্রতিটি কলামের জন্য আপনি যে ধরণের পছন্দ করতে চান তার প্রিলোকট ভেক্টর, সেই ভেক্টরগুলিতে মান সন্নিবেশ করুন এবং তারপরে, আপনার তৈরি করুন data.frame

জুলিয়ান f3(একটি পূর্বনির্ধারিত data.frame) সাথে এখনও অবধি দ্রুততম বিকল্প হিসাবে চালিয়ে যাওয়া , এটি সংজ্ঞায়িত:

# pre-allocate space
f3 <- function(n){
  df <- data.frame(x = numeric(n), y = character(n), stringsAsFactors = FALSE)
  for(i in 1:n){
    df$x[i] <- i
    df$y[i] <- toString(i)
  }
  df
}

এখানে একটি অনুরূপ পন্থা, তবে এটি যেখানে data.frameশেষ পদক্ষেপ হিসাবে তৈরি করা হয়েছে।

# Use preallocated vectors
f4 <- function(n) {
  x <- numeric(n)
  y <- character(n)
  for (i in 1:n) {
    x[i] <- i
    y[i] <- i
  }
  data.frame(x, y, stringsAsFactors=FALSE)
}

microbenchmark"মাইক্রোবেঞ্চমার্ক" প্যাকেজটি আমাদের থেকে আরও ব্যাপক অন্তর্দৃষ্টি দেবে system.time:

library(microbenchmark)
microbenchmark(f1(1000), f3(1000), f4(1000), times = 5)
# Unit: milliseconds
#      expr         min          lq      median         uq         max neval
#  f1(1000) 1024.539618 1029.693877 1045.972666 1055.25931 1112.769176     5
#  f3(1000)  149.417636  150.529011  150.827393  151.02230  160.637845     5
#  f4(1000)    7.872647    7.892395    7.901151    7.95077    8.049581     5

f1()(নীচের পদ্ধতি) অবিশ্বাস্যভাবে কারণ এটি কত ঘন ঘন কল অদক্ষ হয় data.frameএবং কারণ ক্রমবর্ধমান বস্তু যে ভাবে সাধারণত আর মধ্যে ধীর f3()অনেক preallocation কারণে উন্নত হয়, কিন্তু data.frameগঠন নিজেই এখানে বোতলের অংশ হতে পারে। f4()আপনি নিতে চান এমন পদ্ধতির সাথে আপোস না করে সেই বাধাটিকে বাইপাস করার চেষ্টা করে।


আসল উত্তর

এটি সত্যিই ভাল ধারণা নয়, তবে আপনি যদি এইভাবে এটি করতে চান তবে আমার ধারণা আপনি চেষ্টা করতে পারেন:

for (i in 1:10) {
  df <- rbind(df, data.frame(x = i, y = toString(i)))
}

মনে রাখবেন যে আপনার কোডে, অন্য একটি সমস্যা রয়েছে:

  • আপনি stringsAsFactorsযদি অক্ষরগুলি উপাদানগুলিতে রূপান্তর না করতে চান তবে আপনার ব্যবহার করা উচিত । ব্যবহার করুন:df = data.frame(x = numeric(), y = character(), stringsAsFactors = FALSE)

6
ধন্যবাদ! এটি আমার সমস্যার সমাধান করে। কেন এটি "সত্যই ভাল ধারণা নয়"? এবং কীভাবে x এবং y লুপের জন্য মিশ্রিত হয়?
জ্ঞান বেদ

5
@ ব্যবহারকারী ২২২32774৪, এইভাবে আর-তে কোনও বস্তু বাড়ানো অবিশ্বাস্যরূপে অক্ষম An একটি উন্নতি (তবে এখনও সর্বোত্তম উপায় নয়) data.frameআপনি যে চূড়ান্ত আকারের প্রত্যাশা করেন তার কোনওটি পূর্বনির্ধারণ করা এবং [নিষ্কাশন / প্রতিস্থাপনের সাথে মান যুক্ত করা ।
A5C1D2H2I1M1N2O1R2T1

1
ধন্যবাদ, আনন্দ। আমি সাধারণত পূর্বনির্ধারণের সাথে যাই, তবে আমি একমত নই যে এটি সত্যই ভাল ধারণা নয়। এটা পরিস্থিতির উপর নির্ভর করে। আমার ক্ষেত্রে, আমি ছোট ডেটা নিয়ে কাজ করছি এবং বিকল্পটি কোডের ক্ষেত্রে আরও সময় সাশ্রয়ী হবে। এছাড়াও, প্রতিটি পুনরাবৃত্তিতে প্রাক-বরাদ্দকৃত ডেটা ফ্রেমের উপযুক্ত অংশগুলি পূরণ করার জন্য সংখ্যাসূচক সূচকগুলি আপডেট করতে প্রয়োজনীয় তুলনায় এটি আরও মার্জিত কোড। শুধু কৌতূহলী, আপনার মতে এই কাজটি সম্পাদন করার "সেরা উপায়" কী? আমি ভাবতাম যে প্রাকচিকিত্সা সবচেয়ে ভাল হত।
জ্ঞান বেদ

2
@ ব্যবহারকারী 2932774, এটি দুর্দান্ত। আমি আপনার দৃষ্টিভঙ্গিরও প্রশংসা করি - আমি বড় ডেটাসেটগুলির সাথে সত্যই কখনও কাজ করি না। এটি বলেছে যে, আমি যদি কোনও ফাংশন বা অন্য কিছু লেখার বিষয়ে কাজ করতে যাচ্ছি, আমি যখনই সম্ভব যখনই সম্ভব আরও ভাল গতি পেতে কোডটি টুইট করার চেষ্টা করার জন্য কিছুটা অতিরিক্ত প্রচেষ্টা ব্যয় করব। একটি দুর্দান্ত বিশাল গতির পার্থক্যের উদাহরণের জন্য আমার আপডেট দেখুন।
A5C1D2H2I1M1N2O1R2T1

1
ওহ, এটি একটি বিশাল পার্থক্য! সেই সিমুলেশনটি চালানোর জন্য এবং আমাকে মাইক্রোবেঞ্চমার্ক প্যাকেজ সম্পর্কে শেখানোর জন্য ধন্যবাদ। আমি স্পষ্টভাবে আপনার সাথে একমত যে অতিরিক্ত প্রচেষ্টা করা ভাল। আমার বিশেষ ক্ষেত্রে, আমি অনুমান করি যে আমি কিছু কোডে কেবল দ্রুত এবং ময়লা কিছু চাইছিলাম যা আমার আর কখনও চালাতে হবে না। :)
জ্ঞান বেদ

34

আসুন প্রস্তাবিত তিনটি সমাধানকে মাপদণ্ড করুন:

# use rbind
f1 <- function(n){
  df <- data.frame(x = numeric(), y = character())
  for(i in 1:n){
    df <- rbind(df, data.frame(x = i, y = toString(i)))
  }
  df
}
# use list
f2 <- function(n){
  df <- data.frame(x = numeric(), y = character(), stringsAsFactors = FALSE)
  for(i in 1:n){
    df[i,] <- list(i, toString(i))
  }
  df
}
# pre-allocate space
f3 <- function(n){
  df <- data.frame(x = numeric(1000), y = character(1000), stringsAsFactors = FALSE)
  for(i in 1:n){
    df$x[i] <- i
    df$y[i] <- toString(i)
  }
  df
}
system.time(f1(1000))
#   user  system elapsed 
#   1.33    0.00    1.32 
system.time(f2(1000))
#   user  system elapsed 
#   0.19    0.00    0.19 
system.time(f3(1000))
#   user  system elapsed 
#   0.14    0.00    0.14

স্থানটি পূর্ব-বরাদ্দ করা সর্বোত্তম সমাধান হ'ল (আর-তে বর্ণিত)। পরবর্তী সবচেয়ে ভালো সমাধান ব্যবহার করা list, এবং সবচেয়ে খারাপ সমাধান (অন্তত এই সময়জ্ঞান ফলাফল উপর ভিত্তি করে) উপস্থিত হতে পারে rbind


ধন্যবাদ! যদিও আমি আনন্দের পরামর্শের সাথে একমত নই। আমি চাইলে অক্ষরগুলি কোনও ফ্যাক্টরের স্তরে রূপান্তরিত হয় বা না আমি আউটপুট নিয়ে যা করতে চাই তার উপর নির্ভর করে। যদিও আমি অনুমান করি যে সমাধানটির মাধ্যমে আপনি প্রস্তাব করেছেন, ফলস এ স্ট্রিংএফ্যাক্টর সেট করা প্রয়োজন।
জ্ঞান বেদ

সিমুলেশন জন্য ধন্যবাদ। আমি বুঝতে পারি যে প্রক্রিয়াজাতকরণের গতির দিক থেকে প্রাকচিকিত্সা সবচেয়ে ভাল, তবে এই কোডিং সিদ্ধান্ত নেওয়ার ক্ষেত্রে আমি কেবল এটিই বিবেচনা করি নি।
জ্ঞান বেদ

1
F1 এ আপনি সংখ্যার ভেক্টর এক্সকে স্ট্রিং বরাদ্দ দিয়ে বিভ্রান্ত করেছেন। সঠিক লাইনটি হল:df <- rbind(df, data.frame(x = i, y = toString(i)))
এল্ডার আগালরভ

14

মনে করুন আপনি ডেটা আকারের ফ্রেম আগেই জানেন না। এটি কয়েক সারি বা কয়েক মিলিয়ন হতে পারে। আপনার কিছু ধরণের ধারক থাকা দরকার, যা গতিশীলভাবে বৃদ্ধি পায়। আমার অভিজ্ঞতা এবং সমস্ত সম্পর্কিত উত্তর বিবেচনায় নিয়ে এসও আমি 4 স্বতন্ত্র সমাধান নিয়ে আসছি:

  1. rbindlist ডেটা.ফ্রেমে

  2. প্রয়োজনে যখন দ্রুত টেবিলটি দ্বিগুণ করার সাথে এটির data.tableদ্রুত setঅপারেশন ব্যবহার করুন এবং এর সাথে জুটি দিন।

  3. RSQLiteমেমরিতে রাখা টেবিলটি ব্যবহার করুন এবং যুক্ত করুন ।

  4. data.frameডেটা.ফ্রেম সংরক্ষণ করার জন্য কাস্টম এনভায়রনমেন্ট (যার রেফারেন্স সিমানটিক রয়েছে) বৃদ্ধি এবং ব্যবহারের নিজস্ব ক্ষমতা যাতে এটি ফিরতি অনুলিপি করা হয় না।

ছোট এবং বৃহত সংখ্যক সংযুক্ত সংযুক্ত সারির জন্য সমস্ত পদ্ধতির একটি পরীক্ষা এখানে রয়েছে। প্রতিটি পদ্ধতির সাথে এর সাথে সম্পর্কিত 3 টি কার্য রয়েছে:

  • create(first_element)যেটি রাখার সাথে সাথে উপযুক্ত ব্যাকিং অবজেক্টকে ফিরিয়ে দেয় first_element

  • append(object, element)elementএটি টেবিলের শেষে যুক্ত করে (উপস্থাপিত object)।

  • access(object)data.frameসমস্ত sertedোকানো উপাদান সঙ্গে পায় ।

rbindlist ডেটা.ফ্রেমে

এটি বেশ সহজ এবং সোজা-এগিয়ে:

create.1<-function(elems)
{
  return(as.data.table(elems))
}

append.1<-function(dt, elems)
{ 
  return(rbindlist(list(dt,  elems),use.names = TRUE))
}

access.1<-function(dt)
{
  return(dt)
}

data.table::set যখন প্রয়োজন হয় তখন ম্যানুয়ালি টেবিল দ্বিগুণ করা।

আমি একটি rowcountবৈশিষ্ট্যে টেবিলের আসল দৈর্ঘ্য সঞ্চয় করব ।

create.2<-function(elems)
{
  return(as.data.table(elems))
}

append.2<-function(dt, elems)
{
  n<-attr(dt, 'rowcount')
  if (is.null(n))
    n<-nrow(dt)
  if (n==nrow(dt))
  {
    tmp<-elems[1]
    tmp[[1]]<-rep(NA,n)
    dt<-rbindlist(list(dt, tmp), fill=TRUE, use.names=TRUE)
    setattr(dt,'rowcount', n)
  }
  pos<-as.integer(match(names(elems), colnames(dt)))
  for (j in seq_along(pos))
  {
    set(dt, i=as.integer(n+1), pos[[j]], elems[[j]])
  }
  setattr(dt,'rowcount',n+1)
  return(dt)
}

access.2<-function(elems)
{
  n<-attr(elems, 'rowcount')
  return(as.data.table(elems[1:n,]))
}

এসকিউএল দ্রুত রেকর্ড সন্নিবেশের জন্য অনুকূলিত করা উচিত, তাই আমার প্রাথমিকভাবে RSQLiteসমাধানের জন্য উচ্চ আশা ছিল

এটি মূলত অনুরূপ থ্রেডে কার্স্টেন ডাব্লু উত্তর কপি এবং পেস্ট করুন।

create.3<-function(elems)
{
  con <- RSQLite::dbConnect(RSQLite::SQLite(), ":memory:")
  RSQLite::dbWriteTable(con, 't', as.data.frame(elems))
  return(con)
}

append.3<-function(con, elems)
{ 
  RSQLite::dbWriteTable(con, 't', as.data.frame(elems), append=TRUE)
  return(con)
}

access.3<-function(con)
{
  return(RSQLite::dbReadTable(con, "t", row.names=NULL))
}

data.frameএর নিজস্ব সারি-সংযোজন + কাস্টম পরিবেশ।

create.4<-function(elems)
{
  env<-new.env()
  env$dt<-as.data.frame(elems)
  return(env)
}

append.4<-function(env, elems)
{ 
  env$dt[nrow(env$dt)+1,]<-elems
  return(env)
}

access.4<-function(env)
{
  return(env$dt)
}

পরীক্ষার স্যুট:

সুবিধার জন্য আমি তাদের সমস্তকে পরোক্ষ কলিংয়ের সাথে কভার করতে একটি পরীক্ষা ফাংশন ব্যবহার করব। (আমি চেক করেছি: do.callফাংশনগুলিকে সরাসরি কল করার পরিবর্তে ব্যবহার করা কোড চালানো আর দীর্ঘায়িত করে না)।

test<-function(id, n=1000)
{
  n<-n-1
  el<-list(a=1,b=2,c=3,d=4)
  o<-do.call(paste0('create.',id),list(el))
  s<-paste0('append.',id)
  for (i in 1:n)
  {
    o<-do.call(s,list(o,el))
  }
  return(do.call(paste0('access.', id), list(o)))
}

আসুন এন = 10 সন্নিবেশের জন্য পারফরম্যান্সটি দেখুন।

আমি এমন একটি 'প্লেসবো' ফাংশনও যুক্ত করেছি (প্রত্যয় সহ 0) যা কিছু করে না - কেবল পরীক্ষার সেটআপের ওভারহেড পরিমাপ করার জন্য।

r<-microbenchmark(test(0,n=10), test(1,n=10),test(2,n=10),test(3,n=10), test(4,n=10))
autoplot(r)

এন = 10 সারি যুক্ত করার সময়

N = 100 টি সারির জন্য সময় এন = 1000 সারি জন্য সময়

1E5 সারিগুলির জন্য (ইনটেল (আর) কোর (টিএম) i7-4710HQ সিপিইউ @ 2.50GHz উপর পরিমাপ করা হয়েছে):

nr  function      time
4   data.frame    228.251 
3   sqlite        133.716
2   data.table      3.059
1   rbindlist     169.998 
0   placebo         0.202

দেখে মনে হচ্ছে এটি এসকিউএল-ভিত্তিক ক্ষয়, যদিও বড় ডেটাতে কিছুটা গতি ফিরে আসে, তথ্যের কাছাকাছি কোথাও নেই t টেবিল + ম্যানুয়াল এক্সফোনেনশিয়াল বৃদ্ধি। পার্থক্যটি প্রায় দুটি আদেশের মাত্রার!

সারসংক্ষেপ

আপনি যদি জানেন যে আপনি সংখ্যার কম সংখ্যক সারি সংযোজন করবেন (n <= 100), এগিয়ে যান এবং সহজতম সমাধানটি ব্যবহার করুন: বন্ধনী সারণি ব্যবহার করে কেবল ডাটা.ফ্রেমকে সারিগুলি নির্ধারণ করুন এবং ডেটা.ফ্রেমটি এই বিষয়টি উপেক্ষা করুন ignore প্রাক জনবহুল না।

অন্য যে কোনও কিছুর জন্য data.table::setডেটা ব্যবহার করুন এবং বড় করুন t তাড়াতাড়ি টেবিল করুন (যেমন আমার কোড ব্যবহার করে)।


2
এসকিউএলাইট ধীর হওয়ার কারণ হ'ল প্রতিটি INSERT INTO এ, এটি রিন্ডেক্স করতে হবে, যা O (n), যেখানে n সারি সংখ্যা ows এর অর্থ হ'ল এসকিউএল ডাটাবেসটিতে একবারে এক সারি সন্নিবেশ করানো হল ও (এন ^ 2)। এসকিউএলাইট খুব দ্রুত হতে পারে, যদি আপনি একবারে একটি সম্পূর্ণ ডেটা ফ্রেম sertোকান তবে এটি লাইন অনুসারে ক্রমবর্ধমান সর্বোত্তম নয়।
জুলিয়ান জুকার

5

Purrr, পরিপাটি এবং dplyr সঙ্গে আপডেট করুন

প্রশ্নটি ইতিমধ্যে (6 বছর) তারিখের সাথে সাথে উত্তরগুলি আরও নতুন প্যাকেজ সজ্জা এবং পুরীর সাথে একটি সমাধান অনুপস্থিত। সুতরাং এই প্যাকেজগুলির সাথে কাজ করা লোকদের জন্য, আমি পূর্ববর্তী উত্তরের একটি সমাধান যুক্ত করতে চাই - বিশেষত, বেশ আকর্ষণীয়।

Purrr এবং tidyr এর সবচেয়ে বড় সুবিধা হ'ল আরও ভাল পঠনযোগ্যতা IMHO। purrr আরও নমনীয় মানচিত্র () পরিবারের সাথে lapply প্রতিস্থাপন, পরিপাটি সুপার-স্বজ্ঞাত পদ্ধতি অ্যাড_রো অফার - এটি যা বলে ঠিক তাই করে :)

map_df(1:1000, function(x) { df %>% add_row(x = x, y = toString(x)) })

এই সমাধানটি পড়ার জন্য স্বল্প এবং স্বজ্ঞাত এবং এটি তুলনামূলক দ্রুত:

system.time(
   map_df(1:1000, function(x) { df %>% add_row(x = x, y = toString(x)) })
)
   user  system elapsed 
   0.756   0.006   0.766

এটি প্রায় রৈখিকভাবে স্কেল করে, সুতরাং 1e5 সারিগুলির জন্য, কর্মক্ষমতাটি হ'ল:

system.time(
  map_df(1:100000, function(x) { df %>% add_row(x = x, y = toString(x)) })
)
   user  system elapsed 
 76.035   0.259  76.489 

যা এটি অ্যাডাম রাইজকোভস্কির বেঞ্চমার্কে ডেটা-টেবিলের পরে দ্বিতীয় স্থান অধিকার করবে (যদি আপনার প্লাসবোটি উপেক্ষা করে থাকে):

nr  function      time
4   data.frame    228.251 
3   sqlite        133.716
2   data.table      3.059
1   rbindlist     169.998 
0   placebo         0.202

আপনার ব্যবহারের দরকার নেই add_row। উদাহরণস্বরূপ: map_dfr(1:1e5, function(x) { tibble(x = x, y = toString(x)) })
user3808394

@ ব্যবহারকারী3808394 ধন্যবাদ, এটি একটি আকর্ষণীয় বিকল্প! যদি কেউ স্ক্র্যাচ থেকে একটি ডেটাফ্রেম তৈরি করতে চায় তবে আপনারতর সংক্ষিপ্ততর হয় আরও ভাল সমাধান। আপনার যদি ইতিমধ্যে কোনও ডেটাফ্রেম থাকে তবে আমার সমাধান অবশ্যই আরও ভাল।
চটপটি বিন

আপনার যদি ইতিমধ্যে কোনও ডেটাফ্রেম থাকে তবে আপনি bind_rows(df, map_dfr(1:1e5, function(x) { tibble(x = x, y = toString(x)) }))ব্যবহার না করে তা করবেনadd_row
user3808394

2

ভেক্টরকে 'পয়েন্ট' নিতে দিন যার সংখ্যা 1 থেকে 5 পর্যন্ত রয়েছে

point = c(1,2,3,4,5)

যদি আমরা ভেক্টরের ভিতরে কোথাও 6 নম্বর সংযোজন করতে চাই তবে নীচের কমান্ডটি কার্যকর হতে পারে

i) ভেক্টর

new_var = append(point, 6 ,after = length(point))

ii) একটি টেবিলের কলাম

new_var = append(point, 6 ,after = length(mtcars$mpg))

কমান্ডটি appendতিনটি আর্গুমেন্ট গ্রহণ করে:

  1. ভেক্টর / কলাম পরিবর্তন করতে হবে।
  2. পরিবর্তিত ভেক্টর অন্তর্ভুক্ত করা মান।
  3. একটি সাবস্ক্রিপ্ট, যার পরে মান সংযোজন করা হবে।

সহজ ... !! কারও ক্ষেত্রে ক্ষমা চাই ...!


1

নিম্নলিখিত জন্য আরও একটি জেনেরিক সমাধান হতে পারে।

    extendDf <- function (df, n) {
    withFactors <- sum(sapply (df, function(X) (is.factor(X)) )) > 0
    nr          <- nrow (df)
    colNames    <- names(df)
    for (c in 1:length(colNames)) {
        if (is.factor(df[,c])) {
            col         <- vector (mode='character', length = nr+n) 
            col[1:nr]   <- as.character(df[,c])
            col[(nr+1):(n+nr)]<- rep(col[1], n)  # to avoid extra levels
            col         <- as.factor(col)
        } else {
            col         <- vector (mode=mode(df[1,c]), length = nr+n)
            class(col)  <- class (df[1,c])
            col[1:nr]   <- df[,c] 
        }
        if (c==1) {
            newDf       <- data.frame (col ,stringsAsFactors=withFactors)
        } else {
            newDf[,c]   <- col 
        }
    }
    names(newDf) <- colNames
    newDf
}

ফাংশনটি এক্সটেন্ডিএফ () n সারি সহ একটি ডেটা ফ্রেম প্রসারিত করে।

উদাহরণ হিসাবে:

aDf <- data.frame (l=TRUE, i=1L, n=1, c='a', t=Sys.time(), stringsAsFactors = TRUE)
extendDf (aDf, 2)
#      l i n c                   t
# 1  TRUE 1 1 a 2016-07-06 17:12:30
# 2 FALSE 0 0 a 1970-01-01 01:00:00
# 3 FALSE 0 0 a 1970-01-01 01:00:00

system.time (eDf <- extendDf (aDf, 100000))
#    user  system elapsed 
#   0.009   0.002   0.010
system.time (eDf <- extendDf (eDf, 100000))
#    user  system elapsed 
#   0.068   0.002   0.070

0

আমার সমাধানটি মূল উত্তরটির মতো প্রায় একই তবে এটি আমার পক্ষে কার্যকর হয়নি।

সুতরাং, আমি কলামগুলির জন্য নাম দিয়েছি এবং এটি কাজ করে:

painel <- rbind(painel, data.frame("col1" = xtweets$created_at,
                                   "col2" = xtweets$text))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.