R写表的持续时间比整个数据帧的持续时间长2列

时间:2018-07-25 13:57:41

标签: r

具有40列的数据框:

几秒钟后执行

.site-header {
  height: 500px; /* Make sure to set a height */
  overflow: hidden;
  position: relative;
  width: 100%;
}

.site-header-content {
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
  z-index: 10;
}

.site-header-bottom {
  background: url('https://placeimg.com/640/480/any'); /* Your image */
  background-attachment: fixed;
  background-position: top;
  background-repeat: no-repeat;
  background-size: auto;
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
}

这永远不会结束:

write.table(data_2[1:10000,], file = "/Volumes/2018/06_abteilungen/bi/analytics/tools/adobe/adobe_analytics/adobe_analytics_api_rohdaten/api_via_data_feed_auf_ftp/beispiel_datenexporte_data_feed/r_exporte/channel_va_closer.csv", sep = ";", col.names = NA)

如何仅提取2列而不会导致性能延迟?

1 个答案:

答案 0 :(得分:3)

您可以使用[来为数据帧设置子集,方法是为其指定行/列索引或行/列名称。例如:

dd = data.frame(col1 = rep(1:2, 5), col2 = c(rep(1:3, 3), 1), col3 = 'a')
dd
#    col1 col2 col3
# 1     1    1    a
# 2     2    2    a
# 3     1    3    a
# 4     2    1    a
# 5     1    2    a
# 6     2    3    a
# 7     1    1    a
# 8     2    2    a
# 9     1    3    a
# 10    2    1    a

如果您想要前5行和前2列,则可以执行以下任一操作:

# good
dd[1:5, 1:2]                # using column indices
dd[1:5, c("col1", "col2")]  # using column names

但是您的问题是

# bad
dd[1:5, c(dd$col1, dd$col2)] # using actual values :(

您要什么列?好吧,dd$col1是第一列值:1,2,1,2,...,dd$col2是第二列值1,2,3,1,2,3 ...使用c()您将它们粘在一起,因此我们可以将其扩展到

c(dd$col1, dd$col2) # these are the columns you are asking for
# [1] 1 2 1 2 1 2 1 2 1 2 1 2 3 1 2 3 1 2 3 1

# these are equivalent for this data
dd[1:5, c(dd$col1, dd$col2)]
dd[1:5, c(1,2,1,2,1,2,1,2,1,2,1,2,3,1,2,3,1,2,3,1)]
#   col1 col2 col1.1 col2.1 col1.2 col2.2 col1.3 col2.3 col1.4 col2.4 col1.5 col2.5 col3 col1.6 col2.6 col3.1 col1.7 col2.7
# 1    1    1      1      1      1      1      1      1      1      1      1      1    a      1      1      a      1      1
# 2    2    2      2      2      2      2      2      2      2      2      2      2    a      2      2      a      2      2
# 3    1    3      1      3      1      3      1      3      1      3      1      3    a      1      3      a      1      3
# 4    2    1      2      1      2      1      2      1      2      1      2      1    a      2      1      a      2      1
# 5    1    2      1      2      1      2      1      2      1      2      1      2    a      1      2      a      1      2
#   col3.2 col1.8
# 1      a      1
# 2      a      2
# 3      a      1
# 4      a      2
# 5      a      1

我们要求一次又一次地重复列,列数是原始数据中行数的两倍!我不知道您有多少行,它看起来超过了1000行,因此您不是在要求2列,而是要求超过2000列-也许更多。


两个脚注:

  1. 我第二次推荐data.table::fwrite,这会更快。

  2. 作为一种调试技术,请不要忘记可以运行一些小的代码来找出问题所在。尝试

    write.table(data_2[1:1000,c(data_2$va_closer_detail,data_2$va_closer_id)], 
        file = "/Volumes/2018/06_abteilungen/bi/analytics/tools/adobe/adobe_analytics/adobe_analytics_api_rohdaten/api_via_data_feed_auf_ftp/beispiel_datenexporte_data_feed/r_exporte/channel_va_closer.csv",
        sep = ";", col.names = NA)
    

似乎不起作用,有两件事值得检查:(a)是文件路径有效,(b)是数据有效。如果您只是尝试运行该行的data_2[...]部分,那么您将无需帮助就可以确定问题所在。

data_2[1:1000,c(data_2$va_closer_detail,data_2$va_closer_id)]

当您运行该程序并看到与预期不同的输出时,您再次运行了一行较小的代码,

c(data_2$va_closer_detail,data_2$va_closer_id)

希望问题已经解决