我正在尝试编写一个占用大数据帧的程序,并用这些值的累积频率(按升序排序)替换每列值.例如,如果值列为:5,8,3,5,4,3,8,5,5,1那么相对和累积频率为:
然后原始列变为: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) 我正在使用 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”包上传数据时,有没有办法禁用自动检测?