小编use*_*120的帖子

用累积频率有效地替换数据帧

我正在尝试编写一个占用大数据帧的程序,并用这些值的累积频率(按升序排序)替换每列值.例如,如果值列为:5,8,3,5,4,3,8,5,5,1那么相对和累积频率为:

  • 1:rel_freq = 0.1,cum_freq = 0.1
  • 3:rel_freq = 0.2,cum_freq = 0.3
  • 4:rel_freq = 0.1,cum_freq = 0.4
  • 5:rel_freq = 0.4,cum_freq = 0.8
  • 8:rel_freq = 0.2,cum_freq = 1.0

然后原始列变为:0.8,1.0,0.3,0.8,0.4,0.3,1.0,0.8,0.8,0.1

以下代码正确执行此操作,但由于嵌套循环,它可能很难缩放.知道如何更有效地执行此任务吗?

mydata = read.table(.....)

totalcols = ncol(mydata)
totalrows = nrow(mydata)

for (i in 1:totalcols) {
    freqtable = data.frame(table(mydata[,i])/totalrows)  # create freq table
    freqtable$CumSum = cumsum(freqtable$Freq)   # calc cumulative freq

    hashtable = new.env(hash=TRUE)
    nrows = nrow(freqtable)

    # store cum freq in hash
    for (x in 1:nrows) {
        dummy = toString(freqtable$Var1[x])
        hashtable[[dummy]] = freqtable$CumSum[x]
    } …
Run Code Online (Sandbox Code Playgroud)

hash r vectorization cumulative-frequency dataframe

5
推荐指数
1
解决办法
1120
查看次数

R 到 BigQuery 数据上传错误

我正在使用 R 包“bigrquery”将数据从 R 数据框上传到现有的 BigQuery 表中,如下所示:

mybq = bq_table(project='...', dataset='...', table=...)
bq_table_upload(x=mybq, values=..., create_disposition='CREATE_NEVER', 
                write_disposition='WRITE_APPEND')
Run Code Online (Sandbox Code Playgroud)

但我是以下错误消息:

错误:无效的架构更新。字段 NewID 的类型已从 STRING 更改为 INTEGER

BigQuery 似乎在自动检测数据格式,并错误地认为 NewID 列(其值类似于“00487”)是数字,而实际上它是一个字符串。当我将“x”字符附加到 NewID 值时,错误消失并且上传功能完美。使用“bigrquery”包上传数据时,有没有办法禁用自动检测?

r google-bigquery

2
推荐指数
1
解决办法
1993
查看次数