天道酬勤,学无止境

在 H2O R 中进行子集化(Subsetting in H2O R)

问题

我有一个 h2o 对象。

子集的标准 R

sub1<-trans[trans$Type==1,]

我在 h2o 中尝试了同样的方法。 它不工作

sub1<-trans[trans$Type==1,]

我也试过

sub1<-h2o.exec(trans[trans$Type==1,])

note* trans 是一个 h2o 数据对象。

有什么想法可以在 h2o 中做到吗? 谢谢

回答1

我不确定这是否是最“亲水”的方法,但是:

transType <- trans$Type
sub1 <- trans[transType == 1,]

似乎对我有用没有问题。

对于更可重复的示例,请考虑

library(h2o)
localH2O <- h2o.init()

prosPath <- system.file("extdata", "prostate.csv", package = "h2o")
prostate.hex <- h2o.importFile(localH2O, path = prosPath)
prostate.hex[prostate.hex$GLEASON == 6,]
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Subsetting in H2O R
    I have a h2o object. The standard R for subset sub1<-trans[trans$Type==1,] I tried the same in h2o. It is not working sub1<-trans[trans$Type==1,] I also tried sub1<-h2o.exec(trans[trans$Type==1,]) note* trans is a h2o data Object. Any idea to do it in h2o? Thanks
  • R H2O-内存管理(R H2O - Memory management)
    问题 我正在尝试通过R使用H2O使用一个大型数据集(约10GB)的子集构建多个模型。 数据是一年的数据,我正在尝试构建51个模型(即,在第1周进行训练,在第2周进行预测,等等),每周约有1.5-250万行,包含8个变量。 我已经在一个循环中完成了此操作,我知道这并不总是R中的最佳方法。我发现的另一个问题是H2O实体会累积先前的对象,因此我创建了一个函数来删除除主数据以外的所有对象放。 h2o.clean <- function(clust = localH2O, verbose = TRUE, vte = c()){ # Find all objects on server keysToKill <- h2o.ls(clust)$Key # Remove items to be excluded, if any keysToKill <- setdiff(keysToKill, vte) # Loop thru and remove items to be removed for(i in keysToKill){ h2o.rm(object = clust, keys = i) if(verbose == TRUE){ print(i);flush.console() } } # Print remaining objects in cluster. h2o.ls(clust)
  • 在 R 中使用 OR 条件和字符串进行子集化(Subsetting in R using OR condition with strings)
    问题 我有一个大约有 40 列的数据框,第二列 data[2] 包含其余行数据描述的公司名称。 但是,公司的名称因年份而异(2009 年数据为 09,2010 年没有)。 我希望能够对数据进行子集化,以便我可以同时提取这两年。 这是我正在尝试做的一个例子...... subset(data, data[2] == "Company Name 09" | "Company Name", drop = T) 本质上,我在子集函数中使用 OR 运算符有困难。 但是,我尝试了其他选择: subset(data, data[[2]] == grep("Company Name", data[[2]])) 也许使用字符串函数有更简单的方法? 任何想法都会受到赞赏。 回答1 首先(正如乔纳森在他的评论中所做的那样)要引用第二列,您应该使用data[[2]]或data[,2] 。 但是,如果您使用子集,则可以使用列名: subset(data, CompanyName == ...) 。 对于您的问题,我将执行以下操作之一: subset(data, data[[2]] %in% c("Company Name 09", "Company Name"), drop = TRUE) subset(data, grepl("^Company Name", data[[2]]), drop = TRUE
  • 在R中为水模型打印“漂亮”表(Print “pretty” tables for h2o models in R)
    问题 R有多个软件包,可帮助从统计模型输出中打印“漂亮”表(LaTeX / HTML / TEXT),并轻松比较替代模型规格的结果。 其中一些软件包是apsrtable , xtable , memisc , texreg , outreg和stargazer (有关示例,请参见此处:https: outreg -from-r-statistical-models-output /)。 是否有任何可比的R包支持h2o包的模型? 这是两个带有h2o简单GLM模型的示例,我希望将它们彼此h2o打印为“美丽”表。 # Load package and setup h2o library(h2o) localH2O <- h2o.init(ip = 'localhost', port = 54321, max_mem_size = '4g') # Load data prostatePath <- system.file("extdata", "prostate.csv", package = "h2o") prostate.hex <- h2o.importFile(path = prostatePath, destination_frame = "prostate.hex") # Run GLMs model.output.1 <- h2o.glm(y = "CAPSULE", x =
  • R:从 h2o.randomForest() 和 h2o.gbm() 绘制树(R: Plot trees from h2o.randomForest() and h2o.gbm())
    问题 寻找一种在 rstudio、H2O 的 Flow 或来自 h2o 的 RF 和 GBM 模型的本地 html 页面中绘制树的有效方法,类似于下面链接中的图像。 具体来说,你如何为对象绘制树,(拟合模型)rf1 和 gbm2 由下面的代码生成,也许是通过解析 h2o.download_pojo(rf1) 或 h2o.download_pojo(gbm1)? # # The following two commands remove any previously installed H2O packages for R. # if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) } # if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") } # # Next, we download packages that H2O depends on. # pkgs <- c("methods","statmod","stats","graphics","RCurl","jsonlite","tools","utils") # for (pkg in pkgs) { # if (! (pkg %in%
  • 在 R 中对数据框进行子集化 - 意外结果(subsetting a dataframe in R - unexpected results)
    问题 好吧,找不到更好的标题 假设我有 my_dataframe: Name Value1 Value2 AA 10 20 BB 15 30 如果我这样做: nrow(my_dataframe[my_dataframe$Value2>20,]结果是“1” 我想创建 my_second_dataframe,例如只有列“Value2”: my_second_dataframe<- my_dataframe[,'Value2', drop=FALSE] 让我看看: class(my_second_dataframe) [1] "data.frame" class(my_second_dataframe$Value2) [1] "numeric" 但是之后: nrow(my_second_dataframe[my_second_dataframe$Value2>20,] NULL ????? 这将是一个函数的一部分,我想在其中隔离选择的列,并根据阈值数获取该列的行数。 我究竟做错了什么? 谢谢 回答1 基于?Extract的文档 drop :用于矩阵和数组。 如果为 TRUE,则结果被强制到最低可能的维度(参见示例)。 这仅适用于提取元素,不适用于替换。 有关更多详细信息,请参阅 drop。 另外,在默认情况下它是drop = TRUE为[ x[i, j, ... , drop =
  • 如何在R中更新软件包?(How to update a package in R?)
    问题 我想将一个R软件包升级到已经可用的较新版本。 我试过了 update.packages(c("R2jags")) 但是什么也没做! 控制台上没有输出,没有错误,什么也没有。 我使用了与install.packages相同的语法,但也许我做错了。 我一直在查看?update.packages但无法弄清楚它是如何工作的,在哪里指定软件包等。没有示例。 我还尝试使用install.packages更新该软件包以再次“安装”它,但显示“警告:软件包'R2jags'正在使用,将不会安装” 。 回答1 恐怕您不能做到这一点,好吧,不是update.packages() 。 您需要调用install.packages("R2jags") 。 您无法在当前会话中安装R2jags ,因为您已经将当前版本加载到了该会话中。 如果需要,请保存您无法轻松重新创建的所有对象,然后退出R。然后开始一个新的R会话,立即运行install.packages("R2jags") ,然后在完成后加载该软件包并重新加载到任何先前保存的对象。 您可以尝试使用以下方法卸载软件包: detach(package:R2jags, unload = TRUE) 但是干净地执行此操作非常复杂,除非打包后自行清理。 存在update.packages()来更新指定库位置中的所有过时软件包。 该库位置由第一个参数给出(如果未提供
  • R 当 2 列具有不同值时对 data.frame 进行子集化(R Subsetting a data.frame when 2 columns have different values)
    问题 我有一个像这样的 data.frame: Type1 rep1 Type2 rep2 stat p.value 17 DqSAD 1 rnzDqSAD 9 3.7946 0.0101 18 DqSAD 1 DqSAD 10 -0.5278 0.6428 19 DqSAD 1 rnzDqSAD 10 0.4111 0.2231 20 rnzDqSAD 1 DqSAD 2 -0.3111 0.5085 21 rnzDqSAD 1 rnzDqSAD 2 -0.8904 0.9080 当列 Type1 和 Type 2 具有不同的值时,我想对其进行子集化。 我的意思是以自动方式,没有明确检查这个特定的值,比如 Type1=="DqSAD" & Type2=="rnzDqSAD" 我记得这可以用 sql 来完成,但我不知道如何在 R 中做到这一点. 谢谢! 回答1 您可以通过使用!=逻辑运算符查找Type1和Type2不相等的行来完成此操作。 如果df是数据, > df[with(df, Type1 != Type2), ] # Type1 rep1 Type2 rep2 stat p.value # 17 DqSAD 1 rnzDqSAD 9 3.7946 0.0101 # 19 DqSAD 1 rnzDqSAD 10 0.4111 0.2231 # 20 rnzDqSAD 1
  • 子集 R 数组:长度为 1 时维度丢失(Subsetting R array: dimension lost when its length is 1)
    问题 对数组进行子集化时,R 的行为取决于其中一个维度的长度是否为 1。 如果维度的长度为 1,则该维度在子集化过程中会丢失: ax <- array(1:24, c(2,3,4)) ay <- array(1:12, c(1,3,4)) dim(ax) #[1] 2 3 4 dim(ay) #[1] 1 3 4 dim(ax[,1:2,]) #[1] 2 2 4 dim(ay[,1:2,]) #[1] 2 4 在我看来, ax 和 y 是相同的,对它们执行相同的子集操作应该返回一个具有相同维度的数组。 我可以看到 R 处理这两种情况的方式可能很有用,但在我编写的代码中是不可取的。 这意味着当我将一个子集数组传递给另一个函数时,该函数将得到一个缺少维度的数组,如果我碰巧在早期阶段将维度减少到长度 1。 (所以在这种情况下,R 的灵活性使我的代码不那么灵活!) 如何防止 R 在子集化过程中丢失长度为 1 的维度? 还有另一种索引方式吗? 要设置一些标志? 回答1 正如您发现的那样,默认情况下 R 会删除不必要的维度。 在索引时添加drop=FALSE可以防止这种情况: > dim(ay[,1:2,]) [1] 2 4 > dim(ax[,1:2,]) [1] 2 2 4 > dim(ay[,1:2,,drop = F]) [1] 1 2 4
  • 基于 R 中不同数据框的值进行子集化(Subsetting based on values of a different data frame in R)
    问题 如果行中的每个值都大于不同数据框中的相应行,我想对数据进行子集化。 我还需要跳过一些顶行。 这些以前的问题没有帮助我,但它是相关的: 根据另一个数据框的内容对数据框进行子集化 使用来自不同数据帧的信息的子集数据 [r] > A name1 name2 cond trt ctrl hour 0 3 A 1 1 B 10 1 C 1 1 D 1 1 E 10 10 > B name1 name2 cond trt ctrl hour 0 3 A 1 1 B 1 10 C 1 1 D 1 1 E 1 1 我要这个。 只有 A 中所有值都大于 B 的行: name1 name2 cond trt ctrl hour 0 3 E 10 10 我试过这 3 行: subset(A, TRUE, select=(A[3:7,] > B[3:7,])) subset(A, A > B) A[A[3:7,] > B[3:7,]] 非常感谢。 下面是生成数据的代码: A <- structure(list(name1 = c("trt", "0", "1", "10", "1", "1", "10" ), name2 = c("ctrl", "3", "1", "1", "1", "1", "10")), .Names = c("name1", "name2"), row.names = c(
  • R 中的 h2o.predict 错误(Error with h2o.predict in R)
    问题 尝试在 R 中使用 h2o 创建深度学习预测时出现错误。使用命令 h2o.predict 大约三分之一的预测会发生错误。 这是模型设置: localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE,max_mem_size='20g',nthreads=6) model <- h2o.deeplearning(x = 2:100, y = 1, training_frame = x, l1 = 1e-5, l2 = 1e-5, epochs=500, hidden = c(800,800,100)) prediction <- h2o.predict(model, x[,2:100]) 这是打开和关闭时发生的错误: ERROR: Unexpected HTTP Status code: 500 Server Error (url = http://localhost:54321/99/Rapids) java.lang.RuntimeException [1] "water.MRTask.getResult(MRTask.java:505)" [2] "water.MRTask.doAll(MRTask.java:379)" [3] "water.MRTask.doAll(MRTask.java
  • xts 子集在几个月内给出了错误的结果(xts subsetting gives incorrect results for months)
    问题 我在 Mac OS X 上使用 R 3.2.1,似乎在 xts 子集设置中遇到了不正确的行为。 简而言之,对月度数据进行子集化会得出比应有的结果滞后 1 个月的结果。 这是一个简单的例子,类似于我正在做的古温度分析: 首先,我将为示例制作一些测试数据: xts.test <- xts(rnorm(440*12, mean=0, sd=10),order.by=timeBasedSeq(155001/1989)) 这会生成正确的xts文件 AFAICT。 这是第一年的 12 个月。 head(xts.test, 12L) [,1] Jan 1550 -6.9301845 Feb 1550 12.1581413 Mar 1550 3.9688139 Apr 1550 3.9540268 May 1550 9.8200923 Jun 1550 -4.2090998 Jul 1550 7.5950340 Aug 1550 -6.5967389 Sep 1550 -0.6736532 Oct 1550 6.4939221 Nov 1550 4.3916465 Dec 1550 19.8800872 但是,当我尝试通过选择一年来对此进行子集化时,我得到以下信息: xts.test["1550"] [,1] Feb 1550 12.1581413 Mar 1550 3.9688139
  • 无法将数据框转换为 h2o 对象(Unable to convert data frame to h2o object)
    问题 我在 Rstudio 版本 0.99.447 中运行 h2o 包。 我运行版本 10.9.5 OSX。 我想按照本教程的步骤在 R 中设置本地集群:http://blenditbayes.blogspot.co.uk/2014/07/things-to-try-after-user-part-1-deep .html 第一步似乎没有问题。 似乎有问题的是将我的数据框转换为适当的 h2o 对象。 library(mlbench) dat = BreastCancer[,-1] #reading in data set from mlbench package library(h2o) localH2O <- h2o.init(ip = "localhost", port = 54321, startH2O = TRUE) #sets up the cluster dat_h2o <- as.h2o(localH2O, dat, key = 'dat') #this returns an error message 上面的语句 as.h2o 导致以下错误信息 Error in as.h2o(localH2O, dat, key = "dat") : unused argument (key = "dat") 如果我删除“key”参数,让数据驻留在机器生成的名称下的 H2O
  • R:使用日期列表作为过滤器对数据框进行子集化(R: Subsetting a data frame using a list of dates as the filter)
    问题 我有一个带有日期列和其他一些值列的数据框。 我想从数据框中提取日期列与预先存在的日期列表中的任何元素相匹配的那些行。 例如,使用一个元素的列表,日期“2012-01-01”将从数据框中拉出日期为“2012-01-01”的行。 对于数字,我想我知道如何匹配这些值。 这段代码: testdf <- data.frame(mydate = seq(as.Date('2012-01-01'), as.Date('2012-01-10'), by = 'day'), col1 = 1:10, col2 = 11:20, col3 = 21:30) ...产生这个数据框: mydate col1 col2 col3 1 2012-01-01 1 11 21 2 2012-01-02 2 12 22 3 2012-01-03 3 13 23 4 2012-01-04 4 14 24 5 2012-01-05 5 15 25 6 2012-01-06 6 16 26 7 2012-01-07 7 17 27 8 2012-01-08 8 18 28 9 2012-01-09 9 19 29 10 2012-01-10 10 20 30 我可以做这个: testdf[which(testdf$col3 %in% c('25','29')),] 产生这个: mydate col1 col2
  • 基于 R 中的日期范围对数据进行子集化(Subsetting Data based on a date range in R)
    问题 更新 我设法使用以下代码加载前 1000000 行的数据: newFile <- read.table("course_4_proj_1.txt", header=TRUE, sep=";", na.strings = "?", nrows= 1000000, stringsAsFactors=TRUE) 这是head()返回的内容,仅供参考 head(newFile) Date Time Global_active_power Global_reactive_power Voltage Global_intensity 1 16/12/2006 17:24:00 4.216 0.418 234.84 18.4 2 16/12/2006 17:25:00 5.360 0.436 233.63 23.0 3 16/12/2006 17:26:00 5.374 0.498 233.29 23.0 4 16/12/2006 17:27:00 5.388 0.502 233.74 23.0 5 16/12/2006 17:28:00 3.666 0.528 235.68 15.8 6 16/12/2006 17:29:00 3.520 0.522 235.02 15.0 Sub_metering_1 Sub_metering_2 Sub_metering_3 1 0 1 17 2 0
  • R中的子集列表(subsetting list in R)
    问题 我正在R使用Mcomp包,其中包含用于预测的数据集。 数据按每年,每季度和每月的频率进行组织。 我可以很容易地将其子集成一个列表,但不能使用其他条件进一步子集化。 ##Subset monthly data library("Mcomp") mon <- subset(M3,"monthly") mon列表中的每个元素都具有以下结构,例如mon$N1500具有以下结构 $ N1500:List of 9 ..$ st : chr "M99" ..$ type : chr "MICRO" ..$ period : chr "MONTHLY" ..$ description: chr "SHIPMENTS (Code TD-30USA)" ..$ sn : chr "N1500" ..$ x : Time-Series [1:51] from 1990 to 1994: 3700 2460 3320 2480 3200 2980 3880 3320 3420 3780 ... ..$ xx : Time-Series [1:18] from 1994 to 1996: 2400 2720 2840 2220 2320 2860 2980 2840 3000 3520 ... ..$ h : num 18 ..$ n : int 51 我的问题是我如何将mon子集化
  • 使用整数矩阵对 data.frame 进行子集化(Subsetting a data.frame with an integer matrix)
    问题 我一直遇到这个问题,想知道是否有一个简单的解决方法。 在某些情况下,我发现考虑将矩阵子集化更合乎逻辑 N <- 12 N.NA <- 6 dat <- data.frame(V1=runif(N),V2=runif(N)) sel.mat <- matrix(c(sample(seq(N),N.NA),sample(ncol(dat),N.NA,replace=TRUE)),ncol=2) 这适用于选择,但不适用于替换: > dat[sel.mat] [1] 0.2582569 0.8455966 0.8828083 0.5384263 0.9574810 0.5623158 > dat[sel.mat] <- NA Error in `[<-.data.frame`(`*tmp*`, sel.mat, value = NA) : only logical matrix subscripts are allowed in replacement 我意识到错误消息是有原因的(如果您有多个替换指向同一个元素,它不知道该怎么做),但这并不能阻止 R 允许对向量进行整数替换(例如dat$V1[c(2,3)] <- NA )。 有没有方便的方法来允许用整数矩阵替换? 回答1 FWIW,带替换的矩阵索引在当前的R-devel快照中确实有效(并将成为R-3.0.0的一部分)。 显然,R
  • 在子集化数据框中禁用部分变量名称(Disabling partial variable names in subsetting data frames)
    问题 我刚刚发现 R 将允许我使用部分变量名称来对数据帧进行子集化,只要它们是唯一定义的。 我发现这很危险,想知道是否有办法(如环境变量或其他东西)禁用此行为。 这就是我的意思: myframe <- data.frame(othervar=1:3, myvar=4:6) print(myframe$myv) [1] 4 5 6 我想发生的事情和 for 一样 print(myframe$wrong) NULL 有什么办法可以改变这种情况吗? 回答1 不,不是真的。 您可以使用options(warnPartialMatchDollar=TRUE)在执行此操作时收到警告(我正在使用 r-devel ...我认为这是在发布版本中??),并且您可以使用options(warn=2)将警告升级为错误(但这会将所有警告升级为错误......) 我相信标准的建议/最佳实践是使用[[ -indexing 代替 myframe <- data.frame(othervar=1:3, myvar=4:6) myframe$myv ## [1] 4 5 6 (no problem) myframe$wrong ## NULL options(warnPartialMatchDollar=TRUE) myframe$myv ## [1] 4 5 6 ## Warning message: ## In
  • 基于向量中的搜索模式对数据框进行子集化(subsetting data frame based on search pattern in vector)
    问题 我花了几个小时来解决基于向量中的搜索模式对数据框行进行子集化的问题。 我是 R 的新手。也许这很容易,但我自己做不到,而且我在 stackoverflow 中找不到解决方案 假设我有来自 R 的 mtcars 数据。 我想用一些汽车名称对行进行子集化,例如只有马自达、福特和雪佛兰。 所以我有一个字符向量 car.names ,其中包含我想要子集的汽车名称: car.names <- c("Mazda", "Ford", "Chevrolet") 问题是:如何根据 car.names 中的条件对 mtcars 行进行子集化? 回答1 alexwhan 的回答也是我处理这个问题的方式,但我想我会分享这个答案,以防对其他人有帮助:您可以考虑使用Vectorize创建grep的“矢量化”版本: vGrep <- Vectorize(grep, vectorize.args="pattern") 输出如下所示: vGrep(car.names, rownames(mtcars)) # $Mazda # [1] 1 2 # # $Ford # [1] 29 # # $Chevrolet # integer(0) 您可以unlist输出以使用值从data.frame进行子集data.frame : mtcars[unlist(vGrep(car.names, rownames(mtcars
  • 有条件地对数据框中的新变量进行子集化和计算(Conditionally subsetting and calculating a new variable in dataframe in shiny)
    问题 我正在尝试在 Shiny 的数据框中计算一个新变量,该变量是根据另一个变量有条件地计算出来的。 这是我正在尝试做的一个小例子: mydata <- data.frame(cbind(x = 1, y = 1:10)) value <- 10 #from user input mydata$z[mydata$y >= 5] <- mydata$y[mydata$y >= 5] + value mydata$z[mydata$y < 5] <- mydata$y[mydata$y < 5] - value 这是我的 ui.R 文件: #Library library("shiny") # Define UI for miles per gallon application shinyUI(pageWithSidebar( # Application title headerPanel("Test"), sidebarPanel( numericInput("value", "Enter Value:", 10) ), mainPanel( tableOutput("table") ) ) ) 这是我的 server.R 文件: #Libraries library(shiny) #Load Data mydata <- data.frame(cbind(x = 1, y = 1