在R中有没有办法选择许多非连续的,即奇数或偶数行/列?
我正在绘制我的主成分分析的负载.我有84行数据如下:x_1
y_1
x_2
.....x_42
y_42
目前我正在为x和y加载数据创建数据帧,如下所示:
data.pc = princomp(as.matrix(data))
x.loadings <- data.frame(x=data.pc$loadings[c(1, 3, 5, 7, 9, 11, 13 ,15, 17, 19,
21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41), 1])
yloadings <- data.frame(y=data.pc$loadings[c(2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42), 1])
Run Code Online (Sandbox Code Playgroud)
当然有更简单的方法吗?
我正在使用xtable来生成放入Latex的表格,并且想知道是否有一种方法可以对单元格进行条件格式化,以便所有重要的p值都是灰色的?我在TexShop中使用Knitr.
以下是使用一个例子diamonds
中的数据GGPLOT2,并运行一个测试TukeyHSD来预测carat
从cut
.
library(ggplot2)
library(xtable)
summary(data.aov <- aov(carat~cut, data = diamonds))
data.hsd<-TukeyHSD(data.aov)
data.hsd.result<-data.frame(data.hsd$cut)
data.hsd.result
Run Code Online (Sandbox Code Playgroud)
然后我可以data.hsd.result
进入xtable格式:
xtable(data.hsd.result)
Run Code Online (Sandbox Code Playgroud)
在Latex中,输出如下所示:
diff lwr upr p.adj
Good-Fair -0.19695197 -0.23342631 -0.16047764 0.000000e+00
Very Good-Fair -0.23975525 -0.27344709 -0.20606342 0.000000e+00
Premium-Fair -0.15418175 -0.18762721 -0.12073628 0.000000e+00
Ideal-Fair -0.34329965 -0.37610961 -0.31048970 0.000000e+00
Very Good-Good -0.04280328 -0.06430194 -0.02130461 5.585171e-07
Premium-Good 0.04277023 0.02165976 0.06388070 3.256208e-07
Ideal-Good -0.14634768 -0.16643613 -0.12625923 0.000000e+00
Premium-Very Good 0.08557350 0.06974902 0.10139799 0.000000e+00
Ideal-Very Good -0.10354440 -0.11797729 -0.08911151 0.000000e+00
Ideal-Premium -0.18911791 -0.20296592 …
Run Code Online (Sandbox Code Playgroud) 我通常使用scales
R中的包来计算ggplots y轴上的计数数据百分比.但是,当我尝试在knitr中执行此操作时,由于绘图上的百分比符号,我收到错误:
Error in getMetricsFromLatex(TeXMetrics) :
TeX was unable to calculate metrics for the following string or character:
0%
我可以使用正常计数轴生存,但更喜欢%.有没有解决的办法?
这是一个可重复的示例(删除+ scale_y_continuous(label=percent)
提供了一个可编译的示例):
\documentclass[11pt]{article}
\usepackage{tikz}
\begin{document}
<<packages, echo=F>>=
library(ggplot2)
library(scales)
@
<<chunkopts, echo=F>>=
opts_chunk$set(echo=F, cache=T, autodep=T, fig.width = 9/1.5, fig.height=5/1.5,
fig.align="center", dev="tikz", fig.pos="h!tbp", warning=F, message=F)
dep_auto()
@
<<mydata>>=
mydata <- data.frame(
X = letters[1:10],
Y = sample(c("yes", "no"), 100, replace = TRUE))
@
<<plot>>=
ggplot(mydata, aes(X, fill = Y)) + geom_bar(position = "fill") +
scale_y_continuous(label=percent)
@
\end{document} …
Run Code Online (Sandbox Code Playgroud) 我正在使用 ggplot2 制作随机森林中六个相关变量重要性结果的点图。我的数据(我已经使用 reshape2 将其转换为长格式)如下所示(我的真实数据集有点大):
Factor Group Value
Gender A 0.000127
Age A 0.000383
Informant A -0.000191
Gender B -0.000255
Age B 0.000389
Informant B -0.000312
Gender C -0.000285
Age C 0.000389
Informant C -0.000282
Run Code Online (Sandbox Code Playgroud)
我可以像这样制作点图:
ggplot(mydata, aes(x = Value, y = Factor, colour = Group)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
这是使用不同数据集的示例:
然而,我想要画一条线来指示哪些因素对每个组都很重要。正如本指南第 4 页所述,在此类数据集中,“如果变量重要性值高于最低负评分变量的绝对值,则可以将变量视为信息丰富且重要”。
我想要一个类似于上面的图,同时每个组都有单独的重要性线。这段代码让我很接近,但没有为每个组做单独的行。有人知道该怎么做吗?我尝试过将美学颜色映射到组,但显然缺少一些东西。
ggplot(mydata, aes(x = Value, y = Factor, colour = Group)) +
geom_point() +geom_vline(data=mydata, aes(xintercept=abs(min(Value)),
colour=Group))
Run Code Online (Sandbox Code Playgroud) 我在我的数据上运行了一个 posthoc Tukey HSD,它有十个因子水平。表格很大,我希望只在成对表格中向读者展示 p 值,将 45 行表格留给附录。
这是一个示例数据集:
set.seed(42)
x <- rnorm(100,1,2)
category <- letters[1:10]
data <- cbind.data.frame(x, category)
summary(data.aov <- aov(x~category, data = data))
data.hsd<-TukeyHSD(data.aov)
data.hsd.result<-data.frame(data.hsd$category)
data.hsd.result
Run Code Online (Sandbox Code Playgroud)
结果是一个 45 行的表。相反,我想要一个表,其中因子水平作为行和列名称,在单元格中具有 p 值,显示两者是否显着不同。Xs 或下划线或任何可能代表重复或不必要的比较。像这样的东西:
a b c d e f ... j
a X 0.97 1 0.99 0.89 0.99 ... 0.99
b X X 0.99 0.89 0.94 0.92 ... 0.97
c X X X 0.85 0.93 0.96 ... 0.98
| ... ... ... ... ... ... ... ...
i …
Run Code Online (Sandbox Code Playgroud) 这里的答案有很多关于在堆积条形图中订购条形部分的重要信息。在尝试了各种替代方案并获得了我想要的大部分订单之后,NA 不断出现在堆栈的底部,这是我不喜欢的。
ggplot(df, aes(x=time, fill=forcats::fct_rev(factor(able, levels=rev(likely))))) +
geom_bar() +
theme(axis.text.x = element_text(angle = 315, hjust = 0),
plot.margin = margin(10, 40, 10, 10))
Run Code Online (Sandbox Code Playgroud)
x 轴上的 NA 位于末尾,这很棒。总的来说,将 NA 放在最后可能很好。但是对于堆叠的条形图,我认为开始是底部,结束是顶部(因为底部的东西更容易比较。)
(Marimekko 图表可能会更好,但我在尝试让 ggmosaic 和其他各种东西工作一段时间后放弃了。)
编辑:我发现我修改了一些代码来制作 Marimekko 图表(想给予信任,但忘记了我在哪里找到它。)它确实将 NA 放在顶部。
df %>%
group_by(satisfied, time) %>%
summarise(n = n()) %>%
mutate(x.width = sum(n)) %>%
ggplot(aes(x=satisfied, y=n)) +
geom_col(aes(width=x.width, fill=time),
colour = "white", size=2, position=position_fill(reverse = T)) +
geom_text(aes(label=n),
position=position_fill(vjust = 0.5)) +
facet_grid(~ satisfied, space = 'free', scales='free', switch='x') +
#scale_x_discrete(name="a") …
Run Code Online (Sandbox Code Playgroud) 假设我想在ggplot中的不同年龄组中绘制问题的"是"答案的百分比.这些年龄组显然是因素,但我希望它们以类似比例的方式显示,所以想要使用折线图.
这是一些数据:
mydata <- data.frame(
age_group = c("young", "middle", "old"),
question = sample(c("yes", "no"), 99, replace = TRUE))
mydata$age_group = factor(mydata$age_group,levels(mydata$age_group)[c(3, 1, 2)])
mydata$question = factor(mydata$question,levels(mydata$question)[c(2,1)])
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在使用此代码生成堆叠条形图:
ggplot(mydata, aes(age_group, fill = question)) + geom_bar(position = "fill")
Run Code Online (Sandbox Code Playgroud)
我怎么能把它变成一个折线图,只有"是"答案的频率计数?答案中的标记表明产生正确输出的解决方法:
但我希望有一种方法可以在一行代码中自动执行此操作,而不是先创建此摘要表.
r ×7
ggplot2 ×4
latex ×2
bar-chart ×1
conditional ×1
dataframe ×1
formatting ×1
knitr ×1
p-value ×1
pca ×1
presentation ×1
xtable ×1