Tag: r faq

为什么“比'subset`好?

当我需要过滤data.frame,即提取符合某些条件的行时,我更愿意使用subset函数: subset(airquality, Month == 8 & Temp > 90) 而不是[function: airquality[airquality$Month == 8 & airquality$Temp > 90, ] 我的偏好主要有两个原因: 我发现代码从左到右读得更好。 即使对R一无所知的人也可以知道上面的subset声明在做什么。 因为列可以被称为selectexpression式中的variables,所以我可以节省一些击键。 在我上面的例子中,我只需要用subset键入一次airquality ,而用[ 。 所以我活得很开心,到处都是使用subset ,因为它更短,读起来更好,甚至向我的R编码者提倡它的美。 但是昨天我的世界分崩离析了。 在阅读subset文档时,我注意到这个部分: 警告 这是一个交互式使用的便利function。 对于编程,最好使用标准的子集函数,特别是参数子集的非标准评估可能会有意想不到的后果。 有人能帮助澄清作者的意思吗? 首先,“ 交互使用 ”是指什么? 我知道什么是交互式会话,而不是脚本在BATCH模式下运行,但是我不知道应该做什么区别。 那么能否解释“ 论证子集的非标准评估 ”,为什么它是危险的,也许可以举个例子呢?

将数据框的列拆分为多个列

我想收集表格的数据 before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2')) attr type 1 1 foo_and_bar 2 30 foo_and_bar_2 3 4 foo_and_bar 4 6 foo_and_bar_2 并在上面的“ type ”列上使用split()来得到如下所示的结果: attr type_1 type_2 1 1 foo bar 2 30 foo bar_2 3 4 foo bar 4 6 foo bar_2 我想出了一些令人难以置信的复杂的事情,涉及到某种forms的工作,但我从那以后就错了。 成为最好的方法似乎太复杂了。 我可以像下面那样使用strsplit ,但是不清楚如何将它们回到数据框中的2列。 > strsplit(as.character(before$type),'_and_') [[1]] [1] "foo" "bar" [[2]] [1] […]

同时合并列表中的多个data.frames

我有我想要合并的许多data.frames的列表。 这里的问题是,每个data.frame在行数和列数方面有所不同,但它们都共享关键variables(在下面的代码中我称之为"var1"和"var2" )。 如果数据框架在列方面是相同的,那么我只能用rbind来表示,plyr的rbind.fill会做这个工作,但是这些数据并不是这样。 由于merge命令只适用于2个data.frames,所以我转向Internet寻求想法。 我从这里得到了这个,在R 2.7.2中完美的工作,这正是我当时所做的: merge.rec <- function(.list, …){ if(length(.list)==1) return(.list[[1]]) Recall(c(list(merge(.list[[1]], .list[[2]], …)), .list[-(1:2)]), …) } 我会这样调用函数: df <- merge.rec(my.list, by.x = c("var1", "var2"), by.y = c("var1", "var2"), all = T, suffixes=c("", "")) 但是在2.7.2之后的任何R版本中,包括2.11和2.12,这段代码都会失败,并出现以下错误: Error in match.names(clabs, names(xi)) : names do not match previous names (可以肯定的是,我在其他地方看到其他引用,没有解决scheme)。 有什么办法可以解决这个问题吗?

汇总/汇总每个组的多个variables(即总和,平均值等)

从数据框架,有一个简单的方法来同时聚合(即总结)多个variables吗? 以下是一些示例数据: library(lubridate) days = 365*2 date = seq(as.Date("2000-01-01"), length = days, by = "day") year = year(date) month = month(date) x1 = cumsum(rnorm(days, 0.05)) x2 = cumsum(rnorm(days, 0.05)) df1 = data.frame(date, year, month, x1, x2) 我想同时按年份和月份从df2dataframe中汇总x1和x2variables。 以下代码聚合了x1variables,但是是否也可以同时聚合x2variables? ### aggregate variables by year month df2=aggregate(x1 ~ year+month, data=df1, sum, na.rm=TRUE) head(df2) 任何build议将不胜感激。

在ggplot2条形图中订单栏

我正在试图制作一个条形图,其中最大的条形将与y轴最接近,最短的条形将最远。 所以这就像我的桌子一样 Name Position 1 James Goalkeeper 2 Frank Goalkeeper 3 Jean Defense 4 Steve Defense 5 John Defense 6 Tim Striker 所以我正在试图build立一个条形图来显示根据位置的玩家数量 p <- ggplot(theTable, aes(x = Position)) + geom_bar(binwidth = 1) 但是图中先显示守门员先防守吧,最后是前锋一号。 我想要图表的sorting,使防守栏最接近y轴,守门员,最后是前锋之一。 谢谢

在R中快速读取非常大的表格作为数据框

我有非常大的表(3000万行),我想在R中加载一个数据read.table()有很多方便的function,但是似乎有很多逻辑在执行,会慢事情倒了。 在我的情况下,我假设我知道列的types提前,该表不包含任何列标题或行名称,并没有任何病态字符,我不必担心。 我知道使用scan()作为列表读取表格可能会很快,例如: datalist <- scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0))) 但是,我的一些尝试将其转换为dataframe似乎将上述性能降低了6倍: df <- as.data.frame(scan('myfile',sep='\t',list(url='',popularity=0,mintime=0,maxtime=0)))) 有没有更好的方法来做到这一点? 或者可能完全不同的方法来解决这个问题?

使用$和列名称向量dynamicselect数据框列

我希望根据不同的栏目,一个轮到一个数据框。 我有一个字符向量与order应该基于的相关列名称: parameter <- c("market_value_LOCAL", "ep", "book_price", "sales_price", "dividend_yield", "beta", "TOTAL_RATING_SCORE", "ENVIRONMENT", "SOCIAL", "GOVERNANCE") 我希望循环“参数”中的名称并dynamicselect要用于order数据的列: Q1_R1000_parameter <- Q1_R1000[order(Q1_R1000$parameter[X]), ] 其中X是1:10 (因为我在“参数”中有10个项目)。 为了使我的例子具有可重现性,请考虑数据集“mtcars”和一些存储在字符向量“cols”中的variables名称。 当我尝试使用“cols”的一个dynamic子集从“mtcars”中select一个variables( Q1_R1000$parameter[X] )时,该列未被选中: cols <- c("cyl", "am") mtcars$cols[1] # NULL

我应该如何处理“package xxx”不可用(对于R版本xyz)“警告?

我试图安装一个包,使用 install.packages("foobarbaz") 但收到警告 Warning message: package 'foobarbaz' is not available (for R version xyz) 为什么不认为这个软件包是可用的? 另请参阅这些问题提到这个问题的具体实例: 我的软件包不适用于R 2.15.2 软件包'Rbbg'不可用(R版本2.15.2) 软件包不可用(R版本2.15.2) 软件包doMC不适用于install.packages中的R 3.0.0版警告 依赖'Rglpk'不可用于包'fPortfolio' 当我们的R版本不可用时,该怎么办? R的bigvis软件包不适用于R 3.0.1版吗? 软件包'syncwave'/'mvcwt'不可用(对于R版本3.0.2) 包'钻石'是不可用的(R版本3.0.0) R的plyr软件包不适用于R 3.0.2版吗? https://stackoverflow.com/questions/21580661/installing-predictabel-package-on-r-2-15-2 打包bigmemory不安装在R 64 3.0.2上 软件包“makeR”不可用(对于版本3.0.2) 软件包'RTN'不可用(对于R版本3.0.1) 麻烦安装geoR软件包 包'twitterR'不可用(R版本3.1.0) 如何安装'Rcpp,包? 我得到了“包不可用” 包“数据集”不可用(对于R版本3.1.1) “package'rhipe'不可用(对于R版本3.1.2)” https://stackoverflow.com/questions/31439092/package-dplyr-is-not-available-for-r-version-3-1-1

我如何查看函数的源代码?

我想看一个函数的源代码,看看它是如何工作的。 我知道我可以通过在提示符下键入它的名字来打印一个函数: > t function (x) UseMethod("t") <bytecode: 0x2332948> <environment: namespace:base> 在这种情况下, UseMethod("t")是什么意思? 如何find实际使用的源代码,例如: t(1:10) ? 在其他情况下,我可以看到R函数被调用,但我找不到这些函数的源代码。 > ts.union function (…, dframe = FALSE) .cbind.ts(list(…), .makeNamesTs(…), dframe = dframe, union = TRUE) <bytecode: 0x36fbf88> <environment: namespace:stats> > .cbindts Error: object '.cbindts' not found > .makeNamesTs Error: object '.makeNamesTs' not found 我如何find像.cbindts和.makeNamesTs这样的函数? 在其他情况下,有一些R代码,但大部分工作似乎是在别的地方完成的。 > matrix function […]

将逗号分隔的列拆分成单独的行

我有一个数据框,像这样: data.frame(director = c("Aaron Blaise,Bob Walker", "Akira Kurosawa", "Alan J. Pakula", "Alan Parker", "Alejandro Amenabar", "Alejandro Gonzalez Inarritu", "Alejandro Gonzalez Inarritu,Benicio Del Toro", "Alejandro González Iñárritu", "Alex Proyas", "Alexander Hall", "Alfonso Cuaron", "Alfred Hitchcock", "Anatole Litvak", "Andrew Adamson,Marilyn Fox", "Andrew Dominik", "Andrew Stanton", "Andrew Stanton,Lee Unkrich", "Angelina Jolie,John Stevenson", "Anne Fontaine", "Anthony Harvey"), AB = […]