相关疑难解决方法(0)

data.frame方法最有效的列表?

刚刚和同事谈过这个问题,我们认为看看SO土地上的人们不得不说出来是值得的.假设我有一个包含N个元素的列表,其中每个元素都是长度为X的向量.现在假设我想将其转换为data.frame.与R中大多数事情一样,有剥皮众所周知的猫的多种方式,比如as.dataframe,使用plyr包,comboing do.callcbind,预分配的DF和填充它,和其他人.

提出的问题是当N或X(在我们的例子中是X)变得非常大时会发生什么.当效率(特别是在记忆方面)至关重要时,是否有一种猫皮肤方法显着优越?

performance memory-management r dataframe data.table

33
推荐指数
2
解决办法
5504
查看次数

矢量化操作的速度取决于data.frame的列数

为什么在具有相同数量元素的data.frame上进行比较需要更长的时间,但在向量化操作上排列在更多列中?举一个这个简单的例子,我们从每个元素中减去0.5,然后比较它,看它是否<0(与这个问题相关):

f.df <- function( df , x = 0.5 ){
  df <- df - x
  df[ df < 0 ] <- 0
  return( df )
}


df1 <- data.frame( matrix( runif(1e5) , nrow = 1e2 ) )
df2 <- data.frame( matrix( runif(1e5) , nrow = 1e3 ) )
df3 <- data.frame( matrix( runif(1e5) , nrow = 1e4 ) )

require( microbenchmark )
microbenchmark( f.df( df1 ) , f.df( df2 ) , f.df( df3 ) , times = 10L …
Run Code Online (Sandbox Code Playgroud)

performance r vectorization dataframe

4
推荐指数
2
解决办法
171
查看次数

在列表中合并向量以创建数据框R

我有一个大小均匀的字符向量列表,我希望将它们有效地组合到一个数据帧中,列表中的向量成为新数据帧的行。以下ls是我的列表,df也是我的预分配数据框。

ls <- list(c("r1c1", "r1c2", "r1c3"),
           c("r2c1", "r2c2", "r2c3"))

df <- data.frame(col1 = character(), col2 = character(), col3 = character(),
                 stringsAsFactors = F)

# Desired Result:
  col1   col2   col3
1  r1c1   r1c2   r1c3       
2  r2c1   r2c2   r2c3  
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经尝试过rbind(df, ls)按列创建新的数据框,df如下所示:

  c..r1c1....r1c2....r1c3.. c..r2c1....r2c2....r2c3..
4                      r1c1                      r2c1
5                      r1c2                      r2c2
6                      r1c3                      r2c3
Run Code Online (Sandbox Code Playgroud)

我也尝试过rbind在for循环中执行以下操作:

for (i in 1:length(ls))
  df <- rbind(df, ls[[i]])
Run Code Online (Sandbox Code Playgroud)

但是,这给了我警告信息:invalid factor level, NA generated,即使我最初设置stringsAsFactors为false。当不断在较大的列表上执行时,Rbind似乎也是一个缓慢的过程,因此,我想尽可能地减少其使用。

任何帮助将不胜感激。

r list vector dataframe rbind

0
推荐指数
1
解决办法
2598
查看次数