全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
1053 5
2013-09-30
大家好:


最近在处理一些数据,如果某行中含有某个数字的,需要将整行数据提取出来。因此写了下面的语句去执行,可能是因为数据量大,所以运行时间巨长。请问有什么可以改进的么?

谢谢!


data <- read.table("N")

AH_1 <- matrix(numeric(0), 0,0)

for (i in 1:length(data)){

  if (data[i,1] == N){
     AH_1 <- rbind(AH_1,data[i,])}
}






二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2013-9-30 06:38:26
如果知道AH_1的大小,那么可以先定义好。之后往里面放即可。
不要利用rbind这样,这个很耗时间。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-30 06:51:29
ywh19860616 发表于 2013-9-30 06:38
如果知道AH_1的大小,那么可以先定义好。之后往里面放即可。
不要利用rbind这样,这个很耗时间。
谢谢回复 问题解决

data <- read.table("N")

AH_1 <- matrix(numeric(0),0,0)

AH_1 <- rbind(AH_1,data)[as.vector(data[,1]==N),]

这样避免使用loop,提高效率了。 {:2_31:}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-30 08:32:09
xiaoliang0716 发表于 2013-9-30 06:51
谢谢回复 问题解决

data
> system.time({
+     a <- NULL
+     for(i in 1:1e5)a <- i
+ })
   user  system elapsed
  22.24    0.71   23.09


> system.time({
+     a <- rep(1, 1e5)

+    for(i in 1:1e5)a <- i
+ })
   user  system elapsed
   0.24    0.00    0.23
>

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-30 09:39:38
直接subset原数据不是更简单?
只需要建立一个indicator,看每一行是不是含有你那个数字
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2013-9-30 19:53:58
ntsean 发表于 2013-9-30 09:39
直接subset原数据不是更简单?
只需要建立一个indicator,看每一行是不是含有你那个数字
谢谢回复,我试试看看!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群