标签: plyr

将三列数据帧重新整形为矩阵("长"到"宽"格式)

我有一个data.frame看起来像这样的.

x a 1 
x b 2 
x c 3 
y a 3 
y b 3 
y c 2 
Run Code Online (Sandbox Code Playgroud)

我想以矩阵形式这样做,所以我可以将它送到热图以制作情节.结果应该类似于:

    a    b    c
x   1    2    3
y   3    3    2
Run Code Online (Sandbox Code Playgroud)

我已尝试cast从reshape包中尝试编写手动函数来执行此操作,但我似乎无法正确执行此操作.

r matrix plyr reshape dataframe

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

使用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万
查看次数

如何使用dplyr选择每组中具有最大值的行?

我想用dplyr在每个组中选择一个具有最大值的行.

首先,我生成一些随机数据来显示我的问题

set.seed(1)
df <- expand.grid(list(A = 1:5, B = 1:5, C = 1:5))
df$value <- runif(nrow(df))
Run Code Online (Sandbox Code Playgroud)

在plyr中,我可以使用自定义函数来选择此行.

library(plyr)
ddply(df, .(A, B), function(x) x[which.max(x$value),])
Run Code Online (Sandbox Code Playgroud)

在dplyr中,我使用此代码来获取最大值,但不是具有最大值的行(在本例中为C列).

library(dplyr)
df %>% group_by(A, B) %>%
    summarise(max = max(value))
Run Code Online (Sandbox Code Playgroud)

我怎么能实现这个目标?谢谢你的任何建议.

sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252   
[3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                      
[5] LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] dplyr_0.2  plyr_1.8.1

loaded via a namespace (and not attached):
[1] assertthat_0.1.0.99 parallel_3.1.0      Rcpp_0.11.1 …
Run Code Online (Sandbox Code Playgroud)

r plyr greatest-n-per-group dplyr

98
推荐指数
4
解决办法
9万
查看次数

dplyr:"n()中的错误:不应该直接调用函数"

我试图重现dplyr包中的一个示例但是此错误消息.我期待看到以每种组合的频率产生的新列n.有人能告诉我我错过了什么吗?我三重检查包装是否已加载.一如既往地感谢您的帮助.

 library(dplyr)
# summarise peels off a single layer of grouping
by_vs_am <- group_by(mtcars, vs, am)

by_vs <- summarise(by_vs_am, n = n())
Run Code Online (Sandbox Code Playgroud)

n()出错:不应直接调用此函数

r function conflicting-libraries plyr dplyr

95
推荐指数
4
解决办法
6万
查看次数

dplyr总结:等效".drop = FALSE"以保持组输出长度为零

当使用summarise具有plyrddply功能,空类别默认情况下删除.您可以通过添加更改此行为.drop = FALSE.然而,当使用这不起作用summarisedplyr.还有另一种方法可以在结果中保留空类别吗?

这是假数据的一个例子.

library(dplyr)

df = data.frame(a=rep(1:3,4), b=rep(1:2,6))

# Now add an extra level to df$b that has no corresponding value in df$a
df$b = factor(df$b, levels=1:3)

# Summarise with plyr, keeping categories with a count of zero
plyr::ddply(df, "b", summarise, count_a=length(a), .drop=FALSE)

  b    count_a
1 1    6
2 2    6
3 3    0

# Now try it with dplyr
df %.%
  group_by(b) %.%
  summarise(count_a=length(a), .drop=FALSE)

  b …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr tidyr

93
推荐指数
4
解决办法
3万
查看次数

用dplyr更改变量的值

我经常需要根据不同变量的值更改变量的值,如下所示:

mtcars$mpg[mtcars$cyl == 4] <- NA
Run Code Online (Sandbox Code Playgroud)

我尝试过这样做,dplyr但悲惨地失败了:

mtcars %>%
mutate(mpg = mpg == NA[cyl == 4]) %>%
as.data.frame()
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做dplyr

r plyr dataframe dplyr

92
推荐指数
2
解决办法
12万
查看次数

R中的点是什么意思 - 个人偏好,命名约定或更多?

我(可能)不是指"所有其他变量",意思就像var1~.这里一样.我plyr再次指出并调查mlply并想知道为什么参数是用这样的前导点定义的:

function (.data, .fun = NULL, ..., .expand = TRUE, .progress = "none", 
.parallel = FALSE) 
{
if (is.matrix(.data) & !is.list(.data)) 
    .data <- .matrix_to_df(.data)
f <- splat(.fun)
alply(.data = .data, .margins = 1, .fun = f, ..., .expand = .expand, 
    .progress = .progress, .parallel = .parallel)
}
<environment: namespace:plyr>
Run Code Online (Sandbox Code Playgroud)

有什么用?这只是个人偏好,命名惯例还是更多?通常R是如此功能,以至于我错过了以前很久以前完成的技巧.

coding-style r naming-conventions plyr

71
推荐指数
2
解决办法
2万
查看次数

使用dplyr/group_by查找行数

我正在使用mtcars数据集.我想找到特定数据组合的记录数.与count(*)SQL中的group by子句非常相似的东西.ddply()来自plyr正在为我工​​作

library(plyr)
ddply(mtcars, .(cyl,gear),nrow)
Run Code Online (Sandbox Code Playgroud)

有输出

  cyl gear V1
1   4    3  1
2   4    4  8
3   4    5  2
4   6    3  2
5   6    4  4
6   6    5  1
7   8    3 12
8   8    5  2
Run Code Online (Sandbox Code Playgroud)

使用此代码

library(dplyr)
g <- group_by(mtcars, cyl, gear)
summarise(g, length(gear))
Run Code Online (Sandbox Code Playgroud)

有输出

  length(cyl)
1          32
Run Code Online (Sandbox Code Playgroud)

我找到了传入的各种功能,summarise()但似乎没有一个对我有用.我发现的一个功能是sum(G)返回

Error in eval(expr, envir, enclos) : object 'G' not found
Run Code Online (Sandbox Code Playgroud)

尝试使用n(),返回 …

r plyr dplyr

66
推荐指数
3
解决办法
10万
查看次数

为什么plyr这么慢?

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

r plyr dataframe data.table

58
推荐指数
1
解决办法
5773
查看次数

如何在每个组中创建滞后变量?

我有一个data.table:

set.seed(1)
data <- data.table(time = c(1:3, 1:4),
                   groups = c(rep(c("b", "a"), c(3, 4))),
                   value = rnorm(7))

data
#    groups time      value
# 1:      b    1 -0.6264538
# 2:      b    2  0.1836433
# 3:      b    3 -0.8356286
# 4:      a    1  1.5952808
# 5:      a    2  0.3295078
# 6:      a    3 -0.8204684
# 7:      a    4  0.4874291
Run Code Online (Sandbox Code Playgroud)

我想每个"组"级别计算"值"列的滞后版本.

结果应该是这样的

#   groups time      value  lag.value
# 1      a    1  1.5952808         NA
# 2      a    2  0.3295078  1.5952808 …
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr data.table

58
推荐指数
4
解决办法
6万
查看次数