大家好我怎样才能将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)无效
感谢您的帮助.
我有一个关系数据集,我正在寻找二元信息.
我有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)
重复的发送者 - 接收者之间的关系已被组合,并且重复数量包含在边数中.
任何意见都会非常感激.
谢谢!
我一直在使用基于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从这里建议的源安装,但它没有工作,我仍然得到相同的错误消息.
我发现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将它全部链接起来.有更好的解决方案吗?
我试图使用ggplot绘制每个日历年的时间序列中的变化,并且我对x轴的精细控制存在问题.如果我不使用scale="free_x"那么我最终得到一个x轴,显示几年以及有问题的年份,如下所示:

如果我确实使用scale="free_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) 我正在努力将误差棒放在堆积条上的正确位置.正如我在之前的帖子中读到的那样,我使用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并且我已经在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中,我通常采用以下两种方式之一:
RETAIN 加上一个id和class. 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) 我尝试安装plyr软件包,并收到警告消息,说它不适用于R 3.0.2版.这是真的还是不是?如果没有,为什么我会收到这条消息?我尝试使用两个不同的CRAN镜像,两者都给出了相同的信息.
我经常使用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) 我该怎么做这个计算:
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)