所以我有非常大的数据集(
示例数据:
2 3 4 5 6 7 8 9 10 11 12 13 | a b c 1 1 -1 a 2 2 -2 b 3 3 -3 c 4 4 -4 d 5 5 -5 e 6 6 -6 f 7 7 -7 g 8 8 -8 h 9 9 -9 i 10 10 -10 j |
这是我的
2 3 4 5 6 7 | funs( case_when( . >= 1 ~ 1, TRUE ~ as.double(.)) ) ) |
这需要很长时间才能处理原始数据。知道如何加快速度吗?
这个带有
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | library(purrr) num_cols <- colnames(data)[map_lgl(data, is.numeric)] # select only the numerics data[, (num_cols):= lapply(.SD, function(x) { x[x>1] = 1 x}), .SDcols=num_cols ] data # a aa b c # 1: 1 1 -1 a # 2: 1 1 -2 b # 3: 1 1 -3 c # 4: 1 1 -4 d # 5: 1 1 -5 e # 6: 1 1 -6 f # 7: 1 1 -7 g # 8: 1 1 -8 h # 9: 1 1 -9 i # 10: 1 1 -10 j |
Warning message: In
[.data.table (data, ,:= ((num_cols),
lapply(.SD, function(x) { : Supplied 2 columns to be assigned a list
(length 3) of values (1 unused)
使用的数据:
基准:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | dplyr = data %>% mutate_if(is.numeric, funs( case_when( . >= 1 ~ 1, TRUE ~ as.double(.)) ) ), datatable = data[, (num_cols):= lapply(.SD, function(x) { x[x>1] = 1 x}) ], times = 100 ) # Unit: microseconds # expr min lq mean median uq max neval # dplyr 1465.088 1644.7690 2012.3148 1775.4730 1989.1065 19992.621 100 # datatable 372.282 399.0235 480.9405 440.0375 547.3055 831.398 100 |
公平地说,更新 Ronak Shah 解决方案更快:
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | dplyr = data %>% mutate_if(is.numeric, funs( case_when( . >= 1 ~ 1, TRUE ~ as.double(.)) ) ), datatable = data[, (num_cols):= lapply(.SD, function(x) { x[x>1] = 1 x}) ], base = {dataframe <- as.data.frame(data) dataframe[dataframe > 1] <- 1}, times = 100 ) # Unit: microseconds # expr min lq mean median uq max neval # dplyr 1782.384 1902.1210 2549.3977 1995.116 2099.9800 55628.570 100 # datatable 394.817 422.7605 466.5329 441.690 512.9020 628.282 100 # base 118.987 135.5120 160.1595 154.291 176.2255 300.469 100 |
你可以试试:
2 | function(x) {ifelse(x > 1, 1, x)}) |
它省略了 c 列,但之后您可以轻松地合并它。
我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
我有一个只接受一个参数的方法:defmy_method(number)end如果使用number调用方法,我该如何引发错误??通常,我如何定义方法参数的条件?比如我想在调用的时候报错:my_method(1) 最佳答案 您可以添加guard在函数的开头,如果参数无效则引发异常。例如:defmy_method(number)failArgumentError,"Inputshouldbegreaterthanorequalto2"ifnumbereputse.messageend#=>Inputshouldbegreaterthano
“输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c
我需要一个表,其中行实际上是2行表,一个嵌套表是..我怎样才能在Prawn中做到这一点?也许我需要延期..但哪一个? 最佳答案 现在支持子表:Prawn::Document.generate("subtable.pdf")do|pdf|subtable=pdf.make_table([["sub"],["table"]])pdf.table([[subtable,"original"]])end 关于ruby-on-rails-PrawnPDF:Ineedtogeneratenested
我的Gallery模型中有以下查询:media_items.includes(:photo,:video).rank(:position_in_gallery)我的图库模型有_许多媒体项,每个都有一个照片或视频关联。到目前为止,一切正常。它返回所有media_items包括它们的photo或video关联,由media_item的position_in_gallery属性排序。但是我现在需要将此查询返回的照片限制为仅具有is_processing属性的照片,即nil。是否可以进行相同的查询,但条件是返回的照片等同于:.where(photo:'photo.is_processingIS
除了可访问性标准不鼓励使用这一事实指向当前页面的链接,我应该怎么做重构以下View代码?#navigation%ul.tabbed-ifcurrent_page?(new_profile_path)%li{:class=>"current_page_item"}=link_tot("new_profile"),new_profile_path-else%li=link_tot("new_profile"),new_profile_path-ifcurrent_page?(profiles_path)%li{:class=>"current_page_item"}=link_tot("p
我有以下内容:text.gsub(/(lower)(upper)/,'\1\2')我可以将\2替换为大写吗?类似于:sed-e's/\(abc\)/\U\1/'这在Ruby中可行吗? 最佳答案 查看gsub文档:str.gsub(模式){|匹配|block}→new_str在block形式中,当前匹配字符串作为参数传入,$1、$2、$`、$&、$'等变量将被适当设置。block返回的值将替换为每次调用的匹配项。"alowerupperb".gsub(/(lower)(upper)/){|s|$1+""+$2.upcase}
我正在尝试按Rails相关模型中的字段进行排序。我研究的所有解决方案都没有解决如果相关模型被另一个参数过滤?元素模型classItem相关模型:classPriority我正在使用where子句检索项目:@items=Item.where('company_id=?andapproved=?',@company.id,true).all我需要按相关表格中的“位置”列进行排序。问题在于,在优先级模型中,一个项目可能会被多家公司列出。因此,这些职位取决于他们拥有的company_id。当我显示项目时,它是针对一个公司的,按公司内的职位排序。完成此任务的正确方法是什么?感谢您的帮助。PS-我
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia