我要查找已记录至少 2 次的患者 ID。
输出应该是:
谢谢。
又一个
2 3 | group_by(PATIENT_ID) %>% filter(n() > 1 & row_number() == 1) |
和
2 3 4 5 6 7 | DT <- as.data.table(df) DT[, .(n=.N),by=PATIENT_ID][n>1,][,n:=NULL][] # PATIENT_ID # 1: 1 # 2: 3 # 3: 5 |
如果您的数据比样本大,这些基准会改变,但可能会以相同的比例发生变化:user31264\\ 的答案几乎肯定是最快的,而更复杂的
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | user = { a = rle(df$PATIENT_ID) data.frame(PATIENT_ID=a$values[a$lengths>1]) }, user_sort = { a = rle(sort(df$PATIENT_ID)) data.frame(PATIENT_ID=a$values[a$lengths>1]) }, r2a = df %>% group_by(PATIENT_ID) %>% filter(n() > 1 & row_number() == 1) %>% ungroup(), r2b = DT[, .(n=.N),by=PATIENT_ID][n>1,][,n:=NULL], csg = df %>% group_by(PATIENT_ID) %>% summarize(n = n()) %>% filter(n >= 2) %>% select(PATIENT_ID), duck = df %>% group_by(PATIENT_ID) %>% mutate(N=n()) %>% filter(N>=2) %>% select(-N) %>% filter(!duplicated(PATIENT_ID)) ) # Unit: microseconds # expr min lq mean median uq max neval # user 116.2 138.55 168.536 167.30 180.30 366.2 100 # user_sort 160.1 184.55 238.249 224.60 255.60 464.3 100 # r2a 3018.4 3399.60 4020.076 3839.70 4202.95 12193.5 100 # r2b 2094.6 2945.30 3367.188 3277.80 3838.35 5183.8 100 # csg 5382.5 6262.20 6708.582 6670.90 6992.80 9078.2 100 # duck 7538.3 8568.55 9275.720 8928.65 9420.20 16678.5 100 |
另一个 dplyr 解决方案,使用
2 3 4 5 6 | df %>% group_by(PATIENT_ID) %>% summarize(n = n()) %>% filter(n >= 2) %>% select(PATIENT_ID) |
2 | df_output=data.frame(PATIENT_ID=a$val[a$len>1]) |
如果df未排序,第一行应该是
试试这个:
2 3 4 5 6 7 8 9 10 11 12 | df %>% group_by(PATIENT_ID) %>% mutate(N=n()) %>% filter(N>=2) %>% select(-N) %>% filter(!duplicated(PATIENT_ID)) # A tibble: 3 x 1 # Groups: PATIENT_ID [3] PATIENT_ID <dbl> 1 1 2 3 3 5 |
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr
因此,当我遵循MichaelHartl的RubyonRails教程时,我注意到在用户表中,我们为:email属性添加了一个唯一索引,以提高find的效率方法,因此它不会逐行搜索。到目前为止,我们一直在根据情况使用find_by_email和find_by_id进行搜索。然而,我们从未为:id属性设置索引。:id是否自动索引,因为它在默认情况下是唯一的并且本质上是顺序的?或者情况并非如此,我应该为:id搜索添加索引吗? 最佳答案 大多数数据库(包括sqlite,这是RoR中的默认数据库)会自动索引主键,对于RailsMigration
我想找到给定字符串中的所有匹配项,包括重叠匹配项。我怎样才能实现它?#Example"a-b-c-d".???(/\w-\w/)#=>["a-b","b-c","c-d"]expected#Solutionwithoutoverlappedresults"a-b-c-d".scan(/\w-\w/)#=>["a-b","c-d"],but"b-c"ismissing 最佳答案 在积极的前瞻中使用捕获:"a-b-c-d".scan(/(?=(\w-\w))/).flatten#=>["a-b","b-c","c-d"]参见Rubyde
我在我的rails应用程序中安装了来自github.com的acts_as_versioned插件,但有一段代码我不完全理解,我希望有人能帮我解决这个问题class_eval我知道block内的方法(或任何它是什么)被定义为类内的实例方法,但我在插件的任何地方都找不到定义为常量的CLASS_METHODS,而且我也不确定是什么here,并且有问题的代码从lib/acts_as_versioned.rb的第199行开始。如果有人愿意告诉我这里的内幕,我将不胜感激。谢谢-C 最佳答案 这是一个异端。http://en.wikipedia
这应该是一个简单的问题,但我找不到任何相关信息。给定一个Ruby中的正则表达式,对于每个匹配项,我需要检索匹配的模式$1、$2,但我还需要匹配位置。我知道=~运算符为我提供了第一个匹配项的位置,而string.scan(/regex/)为我提供了所有匹配模式。如果可能,我需要在同一步骤中获得两个结果。 最佳答案 MatchDatastring.scan(regex)do$1#Patternatfirstposition$2#Patternatsecondposition$~.offset(1)#Startingandendingpo
下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson