【问题标题】:Outputting Results into Data Frame将结果输出到数据框中
【发布时间】:2018-01-02 08:03:21
【问题描述】:

我无法将某些 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(空)”。我不确定到底是什么问题,因为输出的数据是我想要的。我研究了矩阵与数据框的问题,输出上的 rbind,ldply,as.data.frame,R list to data frame。我遇到了同样的问题,即每一位代码都没有输出到数据帧。我在Multidimensional array into data frame 的 reshape2 库中尝试了“melt”函数,它创建了一个 1 列宽、11 行长、数字为 0-10 的数据框,并且出现此错误: “名称错误(对象)1 必须与向量 [0] 的长度相同"

我认为这是输出的基本内容,但我无法找出问题所在。任何帮助将不胜感激。

【问题讨论】:

  • 对于你计算的每一行新行,你都需要它rbind它到df。你能不能试一试...
  • 请显示一些数据,包括 ip_test 对象。
  • @cephalopod rbind 是要走的路,我只是不熟悉它。我没有意识到“print”和“rbind”之间的区别。
  • @Parfait 我不确定你指的是哪个数据,输入和输出数据集都是完整的。

标签: r csv matrix dataframe output


【解决方案1】:

您的代码的问题是您没有将新行分配给 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

【讨论】:

  • 成功了!谢谢@Matt,我用你的例子修改了代码,一切都很完美。我不得不像这样初始化 ip_list 数据框:ip_list
  • 我知道这超出了 R 的预期功能范围,完整的 IP 列表包含约 300 万行。我确信有更好的工具可以做到这一点,但是,由于我的技能有限,我仍然比其他语言更熟悉 R。再次感谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2014-01-17
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2023-03-09
  • 2019-11-19
相关资源
最近更新 更多