在使用plyrI 时,我经常发现使用adply标量函数很有用,我必须将其应用于每一行.
例如
data(iris)
library(plyr)
head(
adply(iris, 1, transform , Max.Len= max(Sepal.Length,Petal.Length))
)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len
1 5.1 3.5 1.4 0.2 setosa 5.1
2 4.9 3.0 1.4 0.2 setosa 4.9
3 4.7 3.2 1.3 0.2 setosa 4.7
4 4.6 3.1 1.5 0.2 setosa 4.6
5 5.0 3.6 1.4 0.2 setosa 5.0
6 5.4 3.9 1.7 0.4 setosa 5.4
Run Code Online (Sandbox Code Playgroud)
现在我正在使用dplyr更多,我想知道是否有一个整洁/自然的方式来做到这一点?因为这不是我想要的:
library(dplyr)
head(
mutate(iris, Max.Len= max(Sepal.Length,Petal.Length))
)
Sepal.Length Sepal.Width Petal.Length Petal.Width …Run Code Online (Sandbox Code Playgroud) 抱歉,如果这相当普遍 - 虽然仍然是一个编码问题.
有一点时间在我的手上,我一直在努力学习一点Julia.我认为一个好的开始是复制R microbenchmark功能 - 所以我可以无缝地比较R和Julia功能.
例如,这是microbenchmark我试图模拟的2个R函数的输出:
Unit: seconds
expr min lq median uq max neval
vectorised(x, y) 0.2058464 0.2165744 0.2610062 0.2612965 0.2805144 5
devectorised(x, y) 9.7923054 9.8095265 9.8097871 9.8606076 10.0144012 5
Run Code Online (Sandbox Code Playgroud)
所以到目前为止,在朱莉娅,我正在尝试编写惯用语和希望可理解/简洁的代码.因此,我用列表推导替换了一个双循环来创建一个时序数组,如下所示:
function timer(fs::Vector{Function}, reps::Integer)
# funs=length(fs)
# times = Array(Float64, reps, funs)
# for funsitr in 1:funs
# for repsitr in 1:reps
# times[reps, funs] = @elapsed fs[funs]()
# end
# end
times= [@elapsed fs[funs]() for x=1:reps, funs=1:length(fs)]
return times
end …Run Code Online (Sandbox Code Playgroud) 这可能是一个小问题......
但就在不久之前,我正在查看我编写的一些代码,并注意到我倾向于使用="something"并且='something_else'完全可以互换,通常在同一个函数中.
所以我的问题是:是否有使用一个或其他(单引号或双引号)的R代码有不同的行为?或者他们完全是同义词?
我想这dplyr不仅仅是一个plyr问题.为了速度,我使用的data.table是一些我编写过的代码.在中间步骤中,我有一个表格,其中包含一些基因组数据,大约有32,000行:
> bedbin.dt
Source: local data table [32,138 x 4]
Groups: chr
bin start site chr
1 2 3500000 ssCTCF 1
2 3 4000000 ssCTCF+Cohesin 1
3 3 4000000 ssCTCF 1
4 4 4500000 ucCTCF 1
5 4 4500000 ssCTCF+Cohesin 1
6 4 4500000 ssCTCF+Cohesin 1
7 4 4500000 ssCTCF+Cohesin 1
8 4 4500000 ssCTCF 1
9 4 4500000 ssCTCF 1
10 5 5000000 ssCTCF 1
.. ... ... ... ...
Run Code Online (Sandbox Code Playgroud)
编辑
或者像这样的前100行数据(请向Ricardo Saporta索取说明) …
一个列表
list("haha")
[[1]]
[1] "haha"
Run Code Online (Sandbox Code Playgroud)
列表清单
list(list("haha"))
[[1]]
[[1]][[1]]
[1] "haha"
Run Code Online (Sandbox Code Playgroud)
我无法理解输出 list(list("haha")),在我的意见中输出应该是:
list(list("haha"))
[[1]]
[[1]]
[1] "haha"
Run Code Online (Sandbox Code Playgroud)
这里的魔力是什么?
让我们有这个数据
> allt <- data.frame(day = rep(c("mon", "tue", "wed"), each =3), id = c(1:3,2:4,3:5))
> allt
day id
1 mon 1
2 mon 2
3 mon 3
4 tue 2
5 tue 3
6 tue 4
7 wed 3
8 wed 4
9 wed 5
Run Code Online (Sandbox Code Playgroud)
在最后的数据框中,我们可以看到,对于“星期一”,我们有id [1,2,3],对于“星期二”,我们有id [2,3,4]。因此,如果我们使这些向量相交,则我们将得到[2,3],如果我们使它们并集,那么将得到[1,2,3,4]。这些向量的长度分别为2和4,比率为0.5。那就是我想要的电话号码。
因此,我正在寻找一种通用的方法,如何针对所有可能的组合在更多类别中获得该比率。
结果可能是类似相关矩阵的格式。为了清楚起见,我对2类交叉路口和联合感兴趣,因此,例如,我不需要4路交叉路口(周一,周二,周三,周四)-仅需2天交叉路口。
我一直在测试Rcpp和RcppArmadillo来计算大矩阵的汇总统计数据.这比基础R colMeans或犰狳在约400万行,45列上快得多(快5或10倍).
colMeansRcpp <- cxxfunction(signature(X_="integer"),
plugin='Rcpp',
body='
Rcpp::IntegerMatrix X = X_;
int ncol = X.ncol(); int nrow = X.nrow();
Rcpp::NumericVector out(ncol);
for(int col = 0; col < ncol; col++){
out[col]=Rcpp::sum(X(_, col));
}
return wrap(out/nrow);
')
Run Code Online (Sandbox Code Playgroud)
我真的想计算绘图的中位数和其他分位数 - 因为它需要排序它更需要C++外包.犰狳似乎有点慢,所以我想做一个类似于上面的代码排序,但我不能正确的语法...这是我正在尝试..
# OK I'm aware this floor(nrow/2) is not **absolutely** correct
# I'm simplifying here
colMedianRcpp <- cxxfunction(signature(X_="integer"),
plugin='Rcpp',
body='
Rcpp::IntegerMatrix X = clone(X_);
int ncol = X.ncol(); int nrow = X.nrow();
Rcpp::NumericVector out(ncol);
for(int col = 0; col < ncol; col++){
X(_,col)= …Run Code Online (Sandbox Code Playgroud) 我有一个包含大约100万行的大量文件.前6行看起来像这样 - 整个文件已经排序.
bin1 bin2 expected observed
1 1 1 9.83035e-06 1
2 1 2 3.91360e-05 3
3 1 3 1.68648e-05 1
4 1 4 3.95938e-05 1
5 1 5 2.17026e-05 1
6 1 6 9.20637e-05 4
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,文件可能是它需要的两倍大,因为预期/观察到的数据字段对于bin1是相同的:bin2与bin2相同:bin1即1:5具有与5:1相同的值.
编辑
所以行9581看起来像这样
.. .. .. .. ..
9581 6 1 9.20637e-05 4
Run Code Online (Sandbox Code Playgroud)
因此,我希望在进一步拆分或加载到数据库之前删除冗余行.使用sed或awk有一个合理有效的方法吗?或者这是错误的方法?
编辑我想我想做的是......
这是我不知道该怎么做的第一部分.
谢谢
我是r的新手,但我正在将它用于一个项目,我希望在同一个散点图上代表3个不同的y值和相同的x值,包括每个的线性回归线以及值.我不知道到目前为止我所做的是最好的,但是:
leafdata.long<-melt(leafdata, id="Percent.Area.Loss", measure=c("R...mean", "G.mean", "B.mean"))
ggplot(leafdata.long, aes(Percent.Area.Loss, value, color=variable))+
geom_point()+geom_smooth(method=lm, se=FALSE)+opts(title="Compiled Leaf Data")
Run Code Online (Sandbox Code Playgroud)
以下是它制作的情节:http: //imgur.com/eXNFY5d
任何有关更改x和y标签以及图例的帮助也将受到赞赏.我很失落.
a b c d
1 boiler maker <NA> <NA>
2 clerk assistant <NA> <NA>
3 senior machine setter <NA>
4 operated <NA> <NA> <NA>
5 consultant legal <NA> <NA>
Run Code Online (Sandbox Code Playgroud)
如何创建一个新列,该列采用列'a'中的值,除非任何其他列包含任何一个legal或assistant在哪种情况下它采用该值?