我有一个数据框.我们叫他bob:
> head(bob)
phenotype exclusion
GSM399350 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399351 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399352 3- 4- 8- 25- 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399353 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399354 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
GSM399355 3- 4- 8- 25+ 44+ 11b- 11c- 19- NK1.1- Gr1- TER119-
Run Code Online (Sandbox Code Playgroud)
我想连接这个数据框的行(这将是另一个问题).但看: …
我有一个data.frame,我需要计算每组的平均值(即每个Month,下面).
Name Month Rate1 Rate2
Aira 1 12 23
Aira 2 18 73
Aira 3 19 45
Ben 1 53 19
Ben 2 22 87
Ben 3 19 45
Cat 1 22 87
Cat 2 67 43
Cat 3 45 32
Run Code Online (Sandbox Code Playgroud)
我的期望的输出是像下面,其中对于所述的值Rate1和Rate2是组装置.请忽略这个值,我已经为这个例子做了补充.
Name Rate1 Rate2
Aira 23.21 12.2
Ben 45.23 43.9
Cat 33.22 32.2
Run Code Online (Sandbox Code Playgroud) 文件说
vapply类似于sapply,但具有预先指定的返回值类型,因此使用起来更安全.
你能详细说明为什么它通常更安全,可能提供例子吗?
PS:我知道答案,我已经倾向于避免sapply.我只希望在这里有一个很好的答案,所以我可以指出我的同事.请不要"阅读手册"的答案.
我想我正在使用plyr错误.有人可以告诉我这是否是"高效"的plyr代码?
require(plyr)
plyr <- function(dd) ddply(dd, .(price), summarise, ss=sum(volume))
Run Code Online (Sandbox Code Playgroud)
一点背景:我有一些大的聚合问题,我注意到他们每个人都花了一些时间.在尝试解决问题时,我开始对R中各种聚合过程的性能感兴趣.
我测试了一些聚合方法 - 并且发现自己整天都在等待.
当我最终得到结果时,我发现了plyr方法和其他方法之间的巨大差距 - 这让我觉得我做错了.
我运行了以下代码(我以为我在查看时会查看新的数据帧包):
require(plyr)
require(data.table)
require(dataframe)
require(rbenchmark)
require(xts)
plyr <- function(dd) ddply(dd, .(price), summarise, ss=sum(volume))
t.apply <- function(dd) unlist(tapply(dd$volume, dd$price, sum))
t.apply.x <- function(dd) unlist(tapply(dd[,2], dd[,1], sum))
l.apply <- function(dd) unlist(lapply(split(dd$volume, dd$price), sum))
l.apply.x <- function(dd) unlist(lapply(split(dd[,2], dd[,1]), sum))
b.y <- function(dd) unlist(by(dd$volume, dd$price, sum))
b.y.x <- function(dd) unlist(by(dd[,2], dd[,1], sum))
agg <- function(dd) aggregate(dd$volume, list(dd$price), sum)
agg.x <- function(dd) aggregate(dd[,2], list(dd[,1]), sum)
dtd <- function(dd) …Run Code Online (Sandbox Code Playgroud) 我有一个类似于这个的大型数据框:
df <- data.frame(dive=factor(sample(c("dive1","dive2"),10,replace=TRUE)),speed=runif(10))
> df
dive speed
1 dive1 0.80668490
2 dive1 0.53349584
3 dive2 0.07571784
4 dive2 0.39518628
5 dive1 0.84557955
6 dive1 0.69121443
7 dive1 0.38124950
8 dive2 0.22536126
9 dive1 0.04704750
10 dive2 0.93561651
Run Code Online (Sandbox Code Playgroud)
我的目标是在另一列等于某个值时平均一列的值,并对所有值重复此值.即在上面的示例中,我想为列speed的每个唯一值返回列的平均值dive.所以当时dive==dive1,平均值speed是这个,依此类推dive.
我已经使用R一年多一点了,这是一次成功的冒险.但是,我经常发现,由于不知道如何找到它或它的一个例子,我无法弄清楚.
堆栈溢出,
您是否可以推荐一种学习R的途径,以便为其提供一个工具集来解决统计问题?
在互联网上,r项目网站和邮件列表之间有丰富的知识,但它似乎"无处不在",而且当你真正寻找它时无处可去.
例如,当我第一次开始使用R时,我经历了"Intro to R".然后我读了语言定义(显然没有沉没).但是每当我在Stackoverflow上问一个问题时,我都会遇到一些新的badass函数,它可以解决我在短期内遇到的所有问题.我的问题是,您是如何知道这些功能首先存在的?如何找到它们?据推测,你读过一些东西或找到一些资源,使你的学习成为曲线的指数部分.它以前如何?
显然,R作为统计工具的功能很广泛.出于我自己的目的,我主要从事经济或财务数据.因此,考虑到这一点的答案将是最有帮助的.
似乎虽然grep有一个反转参数,grepl但没有.
我想使用2个过滤器进行子集化
data$ID[grepl("xyx", data$ID) & data$age>60]
Run Code Online (Sandbox Code Playgroud)
如何为年龄> 60而ID和不包含 "xyx"的ID进行子集化?我做的是
data$ID[abs(grepl("xyx", data.frame$ID)-1) & data$age>60]
Run Code Online (Sandbox Code Playgroud)
这看起来很有效,但看起来很糟糕且不直观.有更好的解决方案/参数吗?
谢谢
我理解tapply()在R中做了什么.但是,我无法从文档中解析它的描述:
Apply a Function Over a "Ragged" Array
Description:
Apply a function to each cell of a ragged array, that is to each
(non-empty) group of values given by a unique combination of the
levels of certain factors.
Usage:
tapply(X, INDEX, FUN = NULL, ..., simplify = TRUE)
当我想到tapply时,我想到了sql中的group by.您可以通过INDEX中的并行因子级别将X中的值组合在一起,并将FUN应用于这些组.我已经阅读了100次tapply的描述,仍然无法弄清楚它所说的如何映射到我如何理解tapply.也许有人可以帮我解析一下吗?
亲爱的,我有一个问题NaN.我正在处理一个包含许多变量的大型数据集NaN.数据是这样的:
z=list(a=c(1,2,3,NaN,5,8,0,NaN),b=c(NaN,2,3,NaN,5,8,NaN,NaN))
Run Code Online (Sandbox Code Playgroud)
我用这个命令强制列表到数据框但我得到了这个:
z=as.data.frame(z)
> is.list(z)
[1] TRUE
> is.data.frame(z)
[1] TRUE
> replace(z,is.nan(z),0)
Error en is.nan(z) : default method not implemented for type 'list'
Run Code Online (Sandbox Code Playgroud)
我强迫z到数据框但是这还不够,也许NaN在列表中有一个表单需要更改.谢谢你的帮助.这个数据只是我原始数据有36000个观察值和40个变量的例子.
目标:使用R,通过open.mapquestapi获取地址向量的纬度和经度数据
出发点:由于geocode从ggmap一天开始限制为2500个查询,我需要找到一种不同的方式(我的data.frame由9M条目组成).数据科学工具包不是一种选择,因为我的大多数地址都在英国/美国之外.我在http://rpubs.com/jvoorheis/Micro_Group_Rpres上使用open.mapquestapi 找到了这个优秀的片段.
geocode_attempt <- function(address) {
URL2 = paste("http://open.mapquestapi.com/geocoding/v1/address?key=", "Fmjtd%7Cluub2huanl%2C20%3Do5-9uzwdz",
"&location=", address, "&outFormat='json'", "boundingBox=24,-85,50,-125",
sep = "")
# print(URL2)
URL2 <- gsub(" ", "+", URL2)
x = getURL(URL2)
x1 <- fromJSON(x)
if (length(x1$results[[1]]$locations) == 0) {
return(NA)
} else {
return(c(x1$results[[1]]$locations[[1]]$displayLatLng$lat, x1$results[[1]]$locations[[1]]$displayLatLng$lng))
}
}
geocode_attempt("1241 Kincaid St, Eugene,OR")
Run Code Online (Sandbox Code Playgroud)
我们需要这些库:
library(RCurl)
library(rjson)
library(dplyr)
Run Code Online (Sandbox Code Playgroud)
让我们创建一个包含5个地址的模拟data.frame.
id <- c(seq(1:5))
street <- c("Alexanderplatz 10", "Friedrichstr 102", "Hauptstr 42", "Bruesseler Platz 2", "Aachener Str 324")
postcode …Run Code Online (Sandbox Code Playgroud) r ×10
dataframe ×3
r-faq ×2
aggregate ×1
apply ×1
data.table ×1
geocoding ×1
google-maps ×1
nan ×1
plyr ×1