我以为我有一个非常简单的数据帧转换,但由于一个我无法理解的原因,似乎需要一个永恒,这让我怀疑它可能没有做我所希望的.任何人都能解释一下吗?
第1部分 - 将源数据转换为单独的列(实际df具有2.6M行).
鉴于...
> V1 <- c("E11 2286 1", "ECAT 2286 1", "M11 2286 1", "M12 2286 1", "MCAT 2286 1", "C24 2287 1")
> df <- data.frame(V1)
> df
V1
1 E11 2286 1
2 ECAT 2286 1
3 M11 2286 1
4 M12 2286 1
5 MCAT 2286 1
6 C24 2287 1
Run Code Online (Sandbox Code Playgroud)
我想创建两个新列(itemID和主题)并使用V1中相应行的substr填充每个列.
这个我可以用;
> require(stringr)
> df$itemID <- sapply(1:nrow(df), function(i) str_split(df[i,"V1"]," ")[[1]][[2]] )
> df$topic <- sapply(1:nrow(df), function(i) str_split(df[i,"V1"]," ")[[1]][[1]] )
Run Code Online (Sandbox Code Playgroud)
但这需要几分钟,似乎应该有一个更有效的方式.所以我首先尝试使用sapply;
> sapply(1:nrow(df), …Run Code Online (Sandbox Code Playgroud) 晚间.我开始了解ggplot2并设法创建了一堆今天的情节. 但我遇到了两个障碍.第一个是自动创建绘图时输出的显示方式. 有人可以请我直截了当吗?
当我使用...手动运行图表时
ggplot(l.Exploration$Data,aes_string(x="domain",y="WP0", color="domain")) +
geom_point(position=position_jitter(width=0.3), alpha=0.4) +
geom_boxplot(size=1,alpha=0.9, outlier.size=1, outlier.shape=21, width=0.75, notch=TRUE) +
facet_wrap(~Exchange, ncol=2) +
ggtitle(plotTitle) +
theme(plot.title=element_text(size=rel(1.5), lineheight=.9, face="bold", colour="black")) +
xlab("Exchange") +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
ylab("Weighted Price ($USD)")
Run Code Online (Sandbox Code Playgroud)
我得到了一个整洁的情节......

但是,当我创建绘图作为循环的一部分并让它们自动保存时,它们看起来很糟糕(是的,我知道aes_string(...,Y="WP0")应该使用的是那个i但是我无法弄明白).
第二个问题是如何为Y正确指定aes_string.(我将把它移到另一个问题)
l_ply(-3:3, function(i){
print(i)
path <- "~/Documents/1. Dev/r/data/plot"
filename <- paste(path,"/Story_Price",i,".png",sep="")
yCol <- paste("l.Exploration$Data$WP",i,sep="")
if(i < 0) { plotTitle <- paste("Story Publication Against Price\n[Lead = ",i,"]",sep="")
} else if (i==0) { plotTitle <- …Run Code Online (Sandbox Code Playgroud) 再次坚持,希望更多的线索可以提供指针; o)
我有一个数据集; 3,270行datePublished(2013-04-01:2014-03-31)和域名(coindesk,forbes,mashable,nytimes,路透社,techcrunch,thenextweb&theverge).副本在这里)
> df <- read.csv("dplyr_summary_example.csv")
> head(df)
datePublished domain
1 2013-04-01 coindesk
2 2013-04-01 coindesk
3 2013-04-13 coindesk
4 2013-04-15 coindesk
5 2013-04-15 coindesk
Run Code Online (Sandbox Code Playgroud)
基本上,df在每次发布故事时都有一行日期/域对.
我想要做的是创建一个看起来有点像的新数据框(例如编号)...
datePublished coindeskStories forbesStories... thevergeStories totalStories
2013-04-01 2 1 1 4
2013-04-13 1 1 0 2
2013-04-15 2 0 1 3
Run Code Online (Sandbox Code Playgroud)
因此,对于df中的每个日期,我希望每个域的总故事列,最后总计列总数(总计的总数很容易).
我一直在看,dplyr它看起来确实可以完成这项工作,但到目前为止,我还没有设法一步到位.
对于每个域,然后加入东西是相当简单的:
daily <- group_by(df,datePublished) # group stories by date
cnt.nytimes <- filter(daily, domain=="nytimes") # filter just the nytimes ones
cnt.nytimes <- summarise(cnt.nytimes,nytimesStories=n()) # give table …Run Code Online (Sandbox Code Playgroud)