我可以使用循环解决这个问题,但我正在尝试在向量中思考,所以我的代码将更多R-esque.
我有一个名单.格式为firstname_lastname.我想从这个列表中删除一个只有名字的单独列表.我似乎无法理解如何做到这一点.这是一些示例数据:
t <- c("bob_smith","mary_jane","jose_chung","michael_marx","charlie_ivan")
tsplit <- strsplit(t,"_")
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
> tsplit
[[1]]
[1] "bob" "smith"
[[2]]
[1] "mary" "jane"
[[3]]
[1] "jose" "chung"
[[4]]
[1] "michael" "marx"
[[5]]
[1] "charlie" "ivan"
Run Code Online (Sandbox Code Playgroud)
我可以使用这样的循环得到我想要的东西:
for (i in 1:length(tsplit)){
if (i==1) {t_out <- tsplit[[i]][1]} else{t_out <- append(t_out, tsplit[[i]][1])}
}
Run Code Online (Sandbox Code Playgroud)
这会给我这个:
t_out
[1] "bob" "mary" "jose" "michael" "charlie"
Run Code Online (Sandbox Code Playgroud)
那么我怎么能没有循环呢?
我想编写一个向用户显示状态消息的函数,该消息显示时间,完成百分比和进程的当前状态.我可以处理组合消息,但我想做的事情不仅仅是打印到控制台并让它向上滚动,一个消息接着另一个.我真的很喜欢在不滚动message()和没有任何图形的情况下更改消息.这可能与R?
我在flatfile中收集一些系统数据,其格式如下:
YYYY-MM-DD-HH24:MI:SS DD1 DD2 DD3 DD4
Run Code Online (Sandbox Code Playgroud)
其中DD1-DD4是四项数据.该文件的一个示例是:
2011-02-01-13:29:53 16 8 7 68
2011-02-01-13:29:58 13 8 6 110
2011-02-01-13:30:03 26 25 1 109
2011-02-01-13:30:08 13 12 1 31
2011-02-01-13:30:14 192 170 22 34
2011-02-01-13:30:19 16 16 0 10
2011-02-01-13:30:24 137 61 76 9
2011-02-01-13:30:29 452 167 286 42
2011-02-01-13:30:34 471 177 295 11
2011-02-01-13:30:39 502 192 309 10
Run Code Online (Sandbox Code Playgroud)
该文件超过200万行,每五秒钟有一个数据点.
我需要绘制这些数据,以便能够从中获得意义.
我试过的
目前我已尝试使用各种unix工具gnuplot和rrdtool(awk,sed等).这两种方法都有效,但每次我想以不同的方式查看数据时,似乎都需要大量的切割和重新编辑数据.我的直觉是rrdtool是正确的方法,但目前我正在努力将数据快速地加入其中,部分原因是因为我必须将我的时间戳转换为Unix时代.我的理解是,如果我决定我想要一个新的聚合粒度,我必须重建rrd(这对于实时收集是有意义的,但不是像这样的追溯加载).这些事情让我觉得我可能正在使用错误的工具.
将数据收集到平面文件是固定的 - 例如,我无法将集合直接传递到rrdtool.
我的问题
我希望人们对制图的最佳方式有所了解.我有这些要求:
有什么建议?
我正在尝试改变R中包中的一些命令的功能.很容易看到命令的来源.但是,该函数调用包命名空间中的其他函数.这些函数不是导出的对象.那我该如何访问它们呢?
具体示例:如何访问copula :: rmvdc中使用的asCall()函数?
require(copula)
copula::rmvdc
getAnywhere("asCall")
Run Code Online (Sandbox Code Playgroud)
所以as.Call()在copula包中存在,但我该如何访问它?
> copula::asCall
Error: 'asCall' is not an exported object from 'namespace:copula'
Run Code Online (Sandbox Code Playgroud) 我知道R可以最有效地使用向量,并且应该避免循环.我很难教自己用这种方式编写代码.我想了解如何"矢量化"我的代码.下面是为10,000个非唯一的state(st),plan1(p1)和plan2(p2)组合创建10年样本数据的示例:
st<-NULL
p1<-NULL
p2<-NULL
year<-NULL
i<-0
starttime <- Sys.time()
while (i<10000) {
for (years in seq(1991,2000)) {
st<-c(st,sample(c(12,17,24),1,prob=c(20,30,50)))
p1<-c(p1,sample(c(12,17,24),1,prob=c(20,30,50)))
p2<-c(p2,sample(c(12,17,24),1,prob=c(20,30,50)))
year <-c(year,years)
}
i<-i+1
}
Sys.time() - starttime
Run Code Online (Sandbox Code Playgroud)
这需要大约8分钟才能在我的笔记本电脑上运行.我最终得到了4个向量,每个向量都有100,000个值,正如预期的那样.如何使用矢量函数更快地完成此操作?
作为旁注,如果我将上面的代码限制为1000循环,它只需要2秒,但10,000需要8分钟.知道为什么吗?
在基本图形中,我可以通过执行以下操作创建4个面板图形窗格:
par(mfrow=c(2,2))
for (i in 1:4){
plot(density(rnorm(100)))
}
Run Code Online (Sandbox Code Playgroud)
结果

我想用ggplot2做同样的事情,但我无法弄清楚如何做到这一点.我不能使用facet,因为我的真实数据,与这个简单的例子不同,是非常不同的结构,我想要两个图表是点图表,两个图表是直方图.如何在ggplot2中创建面板或窗格?
如何在R数据框的中间添加列?我想看看我是否有一个名为"LastName"的列,然后将其添加为第三列(如果它尚不存在).
我stat_bin2d在ggplot2包中创建了一个2d直方图.我想控制颜色渐变中的断点数,以及这些断点所在的位置.我敢肯定我只是忽略了一些小事,但我无法弄清楚如何控制分档中的休息时间.
例:
x <- rnorm(100)^2
y <- rnorm(100)^2
df <- data.frame(x,y)
require(ggplot2)
p <- ggplot(df, aes(x, y))
p <- p + stat_bin2d(bins = 20)
p + scale_colour_gradient2(breaks=c(1,2,3,4,5,6))
Run Code Online (Sandbox Code Playgroud)
这会产生:

c(5,10,15)尽管我徒劳地尝试休息,但这个情节只有3次休息c(1,2,3,4,5,6))
任何提示?
我试图用ggplot2绘制格子类型数据,然后在样本数据上叠加正态分布,以说明基础数据的正常程度.我想让顶部的正常dist与面板具有相同的均值和stdev.
这是一个例子:
library(ggplot2)
#make some example data
dd<-data.frame(matrix(rnorm(144, mean=2, sd=2),72,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value", "State_CD")
#This works
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + facet_wrap(~State_CD)
print(pg)
Run Code Online (Sandbox Code Playgroud)
这一切都很好,并产生了一个很好的三个数据面板图.如何在顶部添加正常dist?看来我会使用stat_function,但这会失败:
#this fails
pg <- ggplot(dd) + geom_density(aes(x=Predicted_value)) + stat_function(fun=dnorm) + facet_wrap(~State_CD)
print(pg)
Run Code Online (Sandbox Code Playgroud)
似乎stat_function与facet_wrap功能不相符.我如何让这两个玩得很好?
- - - - - - 编辑 - - - - -
我试图整合下面两个答案中的想法,但我仍然没有:
使用这两个答案的组合我可以一起破解这个:
library(ggplot)
library(plyr)
#make some example data
dd<-data.frame(matrix(rnorm(108, mean=2, sd=2),36,2),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("x_value", "Predicted_value", "State_CD")
DevMeanSt <- ddply(dd, c("State_CD"), function(df)mean(df$Predicted_value))
colnames(DevMeanSt) <- c("State_CD", "mean")
DevSdSt <- ddply(dd, c("State_CD"), …Run Code Online (Sandbox Code Playgroud)