我有一个data.frame
数字和因子变量组成,如下所示.
testFrame <- data.frame(First=sample(1:10, 20, replace=T),
Second=sample(1:20, 20, replace=T), Third=sample(1:10, 20, replace=T),
Fourth=rep(c("Alice","Bob","Charlie","David"), 5),
Fifth=rep(c("Edward","Frank","Georgia","Hank","Isaac"),4))
Run Code Online (Sandbox Code Playgroud)
我想构建一个matrix
为该因子分配虚拟变量并单独保留数值变量.
model.matrix(~ First + Second + Third + Fourth + Fifth, data=testFrame)
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,在运行时会将lm
每个因子的一个级别作为参考级别.但是,我想为matrix
所有因素的每个级别构建一个带有虚拟/指示变量的变量.我正在建立这个矩阵,glmnet
所以我不担心多重共线性.
有没有办法model.matrix
为每个级别的因子创建假人?
我有一堆Stata .dta文件,我想在R中使用.
我的问题是变量名对我没有帮助,因为它们就像"q0100","q0565","q0500"和"q0202".然而,它们被标记为"psu","怀孕的数量","户主"和"航点".
我希望能够抓住标签("psu","航点"等等),并将它们用作我的变量/列名称,因为这些更容易让我使用.
有没有办法做到这一点,最好是在R中,还是通过Stata本身?我知道库(外国)中的read.dta,但不知道它是否可以将标签转换为变量名.
我有一个图表(要复制的代码将在下面),它有两行(和点)数据需要进行颜色编码,然后三组置信区间(行)需要有自己的颜色编码.
不幸的是,ggplot看到了对geom_line()的两次调用,并且它们都以相同的比例拟合.
有没有办法让中心线和点有一个刻度(和图例条目),而外线有一个单独的刻度(和图例条目)?
我见过像ggplot2这样的(复杂的)答案:在不同的层上系统地多个颜色标度或颜色变换?但这依赖于旧的原型系统,我相信现在已逐步淘汰(?).
谢谢你的帮助.
用于生成数据和图形的代码.抱歉长度:
exShapedMayGroup <- structure(list(Date = structure(c(14730, 14730, 14730, 14731,
14731, 14731, 14734, 14734, 14734, 14735, 14735, 14735, 14736,
14736, 14736, 14737, 14737, 14737, 14740, 14740, 14740, 14741,
14741, 14741, 14742, 14742, 14742, 14743, 14743, 14743, 14744,
14744, 14744, 14745, 14745, 14745, 14746, 14746, 14746, 14748,
14748, 14748, 14749, 14749, 14749, 14750, 14750, 14750, 14750,
14750, 14750, 14751, 14751, 14751, 14752, 14752, 14752, 14752,
14752, 14752, 14754, 14754, 14754, 14756, 14756, 14756, …
Run Code Online (Sandbox Code Playgroud) 我正在使用ggplot
下面的代码和数据制作一个dotplot ,产生下面的图表.
ggplot(data=holder, aes(x=Coef, y=CoefShort, colour=factor(Name))) + geom_point() + labs(x="Value", y="Coefficient") + scale_colour_discrete("Model")
Run Code Online (Sandbox Code Playgroud)
它们是大量的过度绘图,我想在点之间创建一些垂直分离.但它必须是系统的,即订单总是红 - 绿 - 蓝.
geom_stack
只有当x值相同时才会起作用,而不是当y值相同时.我尝试使用相反的轴(交换x和y),做一个position_dodge()
然后做一个coord_flip()
.这仅适用于条形图,如下所示.
ggplot(data=holder, aes(y=Coef, x=CoefShort, fill=factor(Name))) + geom_bar(position="dodge", aes(ymax=Coef)) + labs(y="Value", x="Coefficient") + scale_fill_discrete("Model") + coord_flip()
Run Code Online (Sandbox Code Playgroud)
任何想法如何实现堆叠geom_point()
?谢谢.
数据:
structure(list(Coef = c(-3875.46969970703, 7871.08213392282,
1120.33185255098, 1510.13540851347, 1439.07714113149, 1800.92398445336,
-3760.05411752962, 8183.74295221482, 1126.98290537184, 1517.99524139857,
1442.73063836897, 1808.03721179571, -90.6507661872817, -71.7225864185226,
-103.615416254984, -732.167583256825, -1075.67574987664, -1908.56266462926,
-7362.80215630299, 8886.12888250011, 655.767448263926, 848.716877683527,
869.395903077767, 998.254438325812, -211.682481369473, -303.310032581644,
-506.1995360406, -978.697664841985, -1440.30190190734, -2325.22236024601,
2625.94998656519, 3573.68798735398, 4217.82910198788, 4534.8789695778, …
我有一些ggplot代码在0.8.9但没有在0.9.1中工作正常.
我将绘制数据,theDF
并希望绘制一条垂直线xintercept="2010 Q1."
theGrid
仅用于创建theDF
.
theGrid <- expand.grid(2009:2011, 1:4)
theDF <- data.frame(YrQtr=sprintf("%s Q%s", theGrid$Var1, theGrid$Var2),
Minutes=c(1000, 2200, 1450, 1825, 1970, 1770, 1640, 1920, 1790, 1800, 1750, 1600))
Run Code Online (Sandbox Code Playgroud)
使用的代码是:
g <- ggplot(theDF, aes(x=YrQtr, y=Minutes)) +
geom_point() +
opts(axis.text.x=theme_text(angle=90))
g + geom_vline(data=data.frame(Vert="2010 Q2"), aes(xintercept=Vert))
Run Code Online (Sandbox Code Playgroud)
同样,这在R 2.13.2中使用ggplot2 0.8.9也很好,但在R 2.14+中没有ggplot2 0.9.1.
解决方法是:
g + geom_vline(data=data.frame(Vert=4), aes(xintercept=Vert))
Run Code Online (Sandbox Code Playgroud)
但这对我的问题不是一个好的解决方案.
也许乱搞scale_x_discrete
可能有帮助吗?
我有一个稀疏矩阵(dgCMatrix
)作为拟合a的结果glmnet
.我想把这个结果写成一个.csv
但不能使用write.table()
矩阵,因为它不能强制转换成一个data.frame
.
有没有办法将稀疏矩阵强制为a data.frame
或常规矩阵?或者有没有办法将它写入文件,同时保留可能是行名称的系数名称?
在函数内部执行此命令时,我无法将点图保存为pdf.
正常调用时工作正常:
df <- data.frame(a = runif(10), b = runif(10), c = runif(10), x = 1:10)
pdf("test.pdf")
dotplot(a + b + c ~ x, data = df, type = "l", auto.key=TRUE)
dev.off()
Run Code Online (Sandbox Code Playgroud)
但是,如果此代码在函数内部,它将无法工作,只会生成一个空的或空白的文件:
plotFunc <- function(model)
{
pdf("test.pdf")
dotplot(a + b + c ~ x, data = model, type = "l", auto.key=TRUE)
dev.off()
}
plotFunc(df)
Run Code Online (Sandbox Code Playgroud)
但是,在没有文件命令的情况下调用该函数将成功打印到图形窗口:
plotWinFunc <- function(model)
{
dotplot(a + b + c ~ x, data = model, type = "l", auto.key=TRUE)
}
plotWinFunc(df)
Run Code Online (Sandbox Code Playgroud)
这让我相信dotplot()在输出到文件时会出现问题.并且文件的类型无关紧要,我已尝试使用bmp和pdf,两种方法都不起作用.
如何成功将dotplot写入文件?我是否必须使用晶格包中的特殊命令或在某处出错?
谢谢你的帮助.