2017-07-26 56 views
0

我无法将某些R代码的结果输出到数据框中,以便最终导出为CSV。我对R很新,所以我不确定究竟是什么错误。将结果输出到数据框中

我有这个输入数据集,名为 “ip_test”:

ip  ip_end country_name region_name city_name 
702388992 702388994 US   West  LA 

我然后运行该代码:

g = 1 
ip = as.numeric(ip_test[g,1]) 
df <- for(g in 1:as.numeric(nrow(ip_test))) 
{ for(ip in as.numeric(ip_test[g,1]):as.numeric(ip_test[g,2])) 
    { print(cbind(ip_address=ip, 
      country_name = paste(ip_test[g,3], collapse=" "), 
      region_name = paste(ip_test[g,4], collapse=" "), 
      city_name = paste(ip_test[g,5], collapse=" "))) 
    } 
} 

这是输出的结果:

 ip_address country_name region_name city_name 
[1,] "702388992" "US" "West" "LA" 
    ip_address country_name region_name city_name 
[1,] "702388993" "US" "West" "LA" 
    ip_address country_name region_name city_name 
[1,] "702388994" "US" "West" "LA" 

我遇到的问题是数据帧“df”没有被填充任何数据,它仍然是“NULL(空)”。由于输出的数据是我想要的,我不确定问题是什么。我研究了矩阵与数据帧问题,输出为ldply,as.data.frame,R list to data frame。在每一位代码中,我都遇到了同样的问题:数据帧没有输出。我尝试了reshape2库中的“熔化”功能,每Multidimensional array into data frame创建了一个数据帧1列宽11行,数字为0-10,此错误: “名称(对象)中的错误< - nm: 'name'属性1必须与向量[0]的长度相同“

我在想这是基本的输出,但我无法弄清楚这个问题。任何帮助将非常感激。

+0

随着你计算的每一个新行,你都需要'将它'绑定到df。你能不能给它一个... – cephalopod

+0

请显示一些数据,包括* ip_test *对象。 – Parfait

+0

@cephalopod rbind是要走的路,我只是不熟悉它。我没有意识到“印刷”和“混搭”之间的区别。 –

回答

0

您的代码存在的问题是您没有将新行分配给data.frame - 您只是在打印它们。你想要的是rbind

> ip_list=NULL 
> for(i in ip_test$ip:ip_test$ip_end){ 
+ new_row=data.frame("ip_address"=i, "country_name"="US", "region_name"="West", "city_name"="LA") 
+ ip_list=rbind(ip_list, new_row) 
+ } 
> ip_list 
    ip_address country_name region_name city_name 
1 702388992   US  West  LA 
2 702388993   US  West  LA 
3 702388994   US  West  LA 

注意for循环一般是一个糟糕的方式做事R.你可能会更好初始化你需要的列数的空数据帧,然后分配ip_address=start:end

+0

它的工作!感谢@Matt,我用你的例子修改了代码,而且事情正在完善。我不得不这样初始化ip_list数据帧: ip_list < - data.frame(ip_address = integer(),country_name = character(),region_name = character(),city_name = character(),stringsAsFactors = FALSE) –

+0

有关此超出R预期功能的范围,IP的完整列表包含约300万行。我确信有一个更好的工具可以做到这一点,但由于我的技能有限,我对R比其他语言更加熟悉。再次感谢! –