标签: plyr

ddply与lm()函数

大家好我怎样才能将ddply函数用于线性模型:

x1 <- c(1:10, 1:10)
x2 <- c(1:5, 1:5, 1:5, 1:5)
x3 <- c(rep(1,5), rep(2,5), rep(1,5), rep(2,5))

set.seed(123)
y <- rnorm(20, 10, 3)
mydf <- data.frame(x1, x2, x3, y)

require(plyr)
ddply(mydf, mydf$x3, .fun = lm(mydf$y ~ mydf$X1 + mydf$x2)) 
Run Code Online (Sandbox Code Playgroud)

生成此错误:

model.frame.default中的错误(公式= mydf $ y~mydf $ X1 + mydf $ x2,drop.unused.levels = TRUE):变量'mydf $ X1'的类型(NULL)无效

感谢您的帮助.

r plyr dataframe

15
推荐指数
2
解决办法
6999
查看次数

合并数据框内的行

我有一个关系数据集,我正在寻找二元信息.

我有4列.发件人,接收者,属性,边缘

我想要重复发送者 - 接收者计数并将它们转换为额外的边缘.

df <- data.frame(sender = c(1,1,1,1,3,5), receiver = c(1,2,2,2,4,5), 
                attribute = c(12,12,12,12,13,13), edge = c(0,1,1,1,1,0))

   sender receiver attribute edge
1       1        1        12    0
2       1        2        12    1
3       1        2        12    1
4       1        2        12    1
5       3        4        13    1
Run Code Online (Sandbox Code Playgroud)

我希望最终结果如下所示:

  sender receiver attribute edge
1      1        1        12    0
2      1        2        12    3
3      3        4        13    1
Run Code Online (Sandbox Code Playgroud)

重复的发送者 - 接收者之间的关系已被组合,并且重复数量包含在边数中.

任何意见都会非常感激.

谢谢!

r plyr data.table

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

错误:withCallingHandlers崩溃R

我一直在使用基于plyr的功能summarySE,ddply几个月没有任何问题.今天当我在R中运行我的极其基本的例程时,出现了一些错误消息并使R崩溃.

这是一个示例代码和我在R崩溃之前得到的错误:

install.packages("plyr")
library(plyr)
results<-data.frame(Depth=rbind("Surface","Bottom"),DO=(runif(10,4,6)))
ddply(results, .(Depth), summarise,
mean = round(mean(DO), 2),
sd = round(sd(DO), 2),
min = min(DO),
max = max(DO))
Run Code Online (Sandbox Code Playgroud)

Error in withCallingHandlers(tryCatch(evalq((function (i):
object '.rcpp_warning_recorder' not found

我读到这withCallingHandlers是一个处理错误消息的函数,它在ddply使用期间不应该给我任何错误.有谁知道如何修理它?我尝试过重新安装plyr但在这个问题上没有成功.
它工作了14个小时,因此这个错误对我来说毫无意义......谢谢!

编辑:我也尝试plyr这里建议的源安装,但它没有工作,我仍然得到相同的错误消息.

r plyr

15
推荐指数
2
解决办法
8050
查看次数

是否有Hadley用于python的ddply的实现?

我发现Hadley 对R 的plyr包非常有帮助,它是一个用于转换数据的优秀DSL.解决的问题是如此常见,以至于在不操作R中的数据时,我会面对其他用例,但在其他编程语言中.

有谁知道是否存在一个为python做类似事情的模块?就像是:

def ddply(rows, *cols, op=lambda group_rows: group_rows):
    """group rows by cols, then apply the function op to each group
       and return the results aggregating all groups
       rows is a dict or list of values read by csv.reader or csv.DictReader"""
    pass
Run Code Online (Sandbox Code Playgroud)

实施起来应该不会太难,但如果已经存在则会很好.我实现它,我用itertools.groupby它分组cols,然后应用op函数,然后使用itertools.chain将它全部链接起来.有更好的解决方案吗?

python r plyr

14
推荐指数
1
解决办法
1025
查看次数

R ggplot和facet网格:如何控制x轴断点

我试图使用ggplot绘制每个日历年的时间序列中的变化,并且我对x轴的精细控制存在问题.如果我不使用scale="free_x"那么我最终得到一个x轴,显示几年以及有问题的年份,如下所示:

具有共同x轴的小平面网格图

如果我确实使用scale="free_x"那么就像人们所期望的那样,我最终会得到每个情节的刻度标签,并且在某些情况下会因情节而异,我不想要:

具有自由x轴的小平面网格图

我已尝试使用scale_x_date等来定义x轴,但没有任何成功.我的问题是:

问:如何控制ggplot facet网格上的x轴断点和标签,使得(时间序列)x轴对于每个面都相同,仅显示在面板的底部,并采用月份格式1,2,3等或'Jan','Feb','Mar'?

代码如下:

require(lubridate)
require(ggplot2)
require(plyr)

# generate data
df <- data.frame(date=seq(as.Date("2009/1/1"), by="day", length.out=1115),price=runif(1115, min=100, max=200))
# remove weekend days
df <- df[!(weekdays(as.Date(df$date)) %in% c('Saturday','Sunday')),]
# add some columns for later
df$year <- as.numeric(format(as.Date(df$date), format="%Y"))
df$month <- as.numeric(format(as.Date(df$date), format="%m"))
df$day <- as.numeric(format(as.Date(df$date), format="%d"))

# calculate change in price since the start of the calendar year
df <- ddply(df, .(year), transform, pctchg = ((price/price[1])-1))

p <- ggplot(df, aes(date, pctchg)) +
  geom_line( aes(group = 1, …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 plyr

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

堆积条ggplot2上的误差线

我正在努力将误差棒放在堆积条上的正确位置.正如我在之前的帖子中读到的那样,我使用ddply来堆叠错误栏.然后,这改变了堆叠的顺序,所以我订购了因子.现在看来,错误条在一组条形图上是正确的而在另一组条形图上是正确的.我想要的是一个如下图所示的图表,只是显示带有误差条的标准误差.我列出了原始数据和ddply数据以及数据集的输入.在此输入图像描述

Suz2$org <- factor(Suz2$org, levels = c('fungi','bacteria'),ordered = TRUE)

library(plyr) 
plydat <- ddply(Suz2,.(org, group, time),transform,ybegin = copy - se,yend = copy + se) 

colvec <-c("blue", "orange")

ggplot(plydat, aes(time, copy)) + 
  geom_bar(aes(fill = factor(org)), stat="identity", width = 0.7) +
  scale_fill_manual(values = colvec) +
  facet_wrap(~group,nrow = 1)+
  geom_errorbar(aes(ymax=ybegin , ymin= yend ),width=.5) +
  theme(panel.background = element_rect(fill='white', colour='white'), 
        panel.grid = element_line(color = NA),
        panel.grid.minor = element_line(color = NA),
        panel.border = element_rect(fill = NA, color = "black"),
        axis.text.x  = element_text(size=10, colour="black", face = "bold"), …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 plyr

14
推荐指数
2
解决办法
7180
查看次数

通过id变量计算滚动总和,缺少时间点

我正在努力学习R并且我已经在SAS工作了10多年,但我无法找到最好的R方法.拿这些数据:

 id  class           t  count  desired
 --  -----  ----------  -----  -------
  1      A  2010-01-15      1        1
  1      A  2010-02-15      2        3
  1      B  2010-04-15      3        3
  1      B  2010-09-15      4        4
  2      A  2010-01-15      5        5
  2      B  2010-06-15      6        6
  2      B  2010-08-15      7       13
  2      B  2010-09-15      8       21
Run Code Online (Sandbox Code Playgroud)

我想通过id,class和4个月的滚动窗口计算所需的列作为滚动总和.请注意,对于id和class的每个组合,并非所有月份都存在.

在SAS中,我通常采用以下两种方式之一:

  1. RETAIN 加上一个id和class.
  2. PROC SQL 左边连接从df作为df1到df作为df2在id,class和df1.d-df2.d在相应的窗口中

解决此类问题的最佳方法是什么?

t <- as.Date(c("2010-01-15","2010-02-15","2010-04-15","2010-09-15",
               "2010-01-15","2010-06-15","2010-08-15","2010-09-15"))
class <- c("A","A","B","B","A","B","B","B")
id <- c(1,1,1,1,2,2,2,2)
count <- seq(1,8,length.out=8)
desired <- c(1,3,3,4,5,6,13,21)
df <- data.frame(id,class,t,count,desired)
Run Code Online (Sandbox Code Playgroud)

r sas plyr zoo

14
推荐指数
2
解决办法
3188
查看次数

R版3.0.2的Rly plyr包不可用吗?

我尝试安装plyr软件包,并收到警告消息,说它不适用于R 3.0.2版.这是真的还是不是?如果没有,为什么我会收到这条消息?我尝试使用两个不同的CRAN镜像,两者都给出了相同的信息.

r plyr

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

dplyr:将函数table()应用于data.frame的每一列

使用dplyr将函数table()应用于data.frame的每一列

我经常使用plyr在数据帧的每一列上应用表函数,如下所示:

library(plyr)
ldply( mtcars, function(x) data.frame( table(x), prop.table( table(x) ) )  )
Run Code Online (Sandbox Code Playgroud)

是否可以在dplyr中执行此操作

我的尝试失败了:

mtcars %>%  do( table %>% data.frame() )
melt( mtcars ) %>%  do( table %>% data.frame() )
Run Code Online (Sandbox Code Playgroud)

r plyr dplyr

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

按组分组多个分位数

我该怎么做这个计算:

library(ddply)
quantile(baseball$ab)
  0%  25%  50%  75% 100% 
  0   25  131  435  705 
Run Code Online (Sandbox Code Playgroud)

按团队说,由"团队"说?我想要一个带有rownames"team"和列名"0%25%50%75%100%"的data.frame,即quantile每组一个呼叫.

ddply(baseball,"team",quantile(ab))
Run Code Online (Sandbox Code Playgroud)

不是正确的解决方案.我的问题是每个分组操作的OUTPUT是一个长度为5的向量.

换句话说,什么是一个巧妙的解决方案(永远不要头脑):

m=data.frame()
for (i in unique(baseball$team)){m=rbind(m,quantile(baseball[baseball$team==i, ]$ab))}
head(m,3)
  X120 X120.1 X120.2 X120.3 X120.4
1  120  120.0  120.0 120.00    120
2  162  162.0  162.0 162.00    162
3   89   89.0   89.0  89.00     89
Run Code Online (Sandbox Code Playgroud)

r plyr

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

标签 统计

plyr ×10

r ×10

ggplot2 ×2

data.table ×1

dataframe ×1

dplyr ×1

python ×1

sas ×1

zoo ×1