小编Ste*_*son的帖子

使用dplyr将函数应用于表的每一行?

在使用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)

r plyr dplyr

111
推荐指数
5
解决办法
7万
查看次数

什么是通过列或行操作的惯用Julia样式?

抱歉,如果这相当普遍 - 虽然仍然是一个编码问题.

有一点时间在我的手上,我一直在努力学习一点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)

r julia

24
推荐指数
2
解决办法
5629
查看次数

R中是否可以互换"双"和"单"引号(总是)?

这可能是一个小问题......

但就在不久之前,我正在查看我编写的一些代码,并注意到我倾向于使用="something"并且='something_else'完全可以互换,通常在同一个函数中.

所以我的问题是:是否有使用一个或其他(单引号或双引号)的R代码有不同的行为?或者他们完全是同义词?

quotes r double-quotes single-quotes

13
推荐指数
3
解决办法
8522
查看次数

我可以更快地完成这个dplyr + data.table任务吗?

我想这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索取说明) …

r dplyr data.table

5
推荐指数
1
解决办法
1063
查看次数

如何理解r中的列表(列表(对象))?

一个列表

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)

这里的魔力是什么?

r

5
推荐指数
1
解决办法
137
查看次数

如何在交集和并集的R矩阵中进行分类?

让我们有这个数据

> 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天交叉路口。

r

5
推荐指数
1
解决办法
79
查看次数

对Rcpp NumericMatrix的列进行排序以进行中值计算

我一直在测试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)

r rcpp

2
推荐指数
1
解决办法
2153
查看次数

使用sed/awk删除冗余行

我有一个包含大约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有一个合理有效的方法吗?或者这是错误的方法?

编辑我想我想做的是......

  1. 使用awk遍历每一行,如果cbin1> cbin2交换字段.
  2. sort myfile | uniq的

这是我不知道该怎么做的第一部分.

谢谢

bash awk sed

2
推荐指数
1
解决办法
193
查看次数

如何使用ggplot2在R中添加r ^ 2值图?

我是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标签以及图例的帮助也将受到赞赏.我很失落.

r ggplot2

0
推荐指数
1
解决办法
1万
查看次数

R,创建包含第1列或满足条件的新列,第2列/第3列的值

           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'中的值,除非任何其他列包含任何一个legalassistant在哪种情况下它采用该值?

r dataframe data-cleaning

0
推荐指数
1
解决办法
62
查看次数