我有一个数据框,其中列代表物种.物种亲缘关系以列名的后缀编码:
Ac_1234_ AnyString
第二个下划线(_)后面的字符串表示物种隶属关系.我想根据等级相关性绘制一些网络,并且我想根据它们的物种隶属关系对物种进行着色,之后当我用库(qgraph)创建fruchtermann-rheingold图时.我以前通过使用name_suffix对df进行排序然后通过手动计算它们来创建向量来完成它:
list.names <- c("SG01", "SG02")
list <- vector("list", length(list.names))
names(list) <- list.names
list$SG01 <- c(1:12)
list$SG02 <- c(13:25)
str(list)
List of 2
$ SG01 : int [1:12] 1 2 3 4 5 6 7 8 9 10 ...
$ SG02 : int [1:13] 13 14 15 16 17 18 19 20 21 22 ...
Run Code Online (Sandbox Code Playgroud)
对于我正在使用的大数据集来说,这非常繁琐.问题是,我如何避免手动排序和计数,并根据后缀和数据框中的位置提取向量(或列表).我知道我可以使用后缀信息创建一个向量
indx <- gsub(".*_", "", names(my_data))
str(indx)
chr [1:29]
"4" "6" "6" "6" "6" "6" "11" "6" "6" "6" "6" "6" "3" "18" …Run Code Online (Sandbox Code Playgroud) 如何在R中生成此向量:
x <- c("R11", "R12", "R13", "R21", "R22", "R23", "R31",....)直到R7xx一套六个字母(R, S, D, A, B, X)?
等等?没有实际输入它.
也许我不正确,但在我看来,以上标开头的表达式中有一个不需要的空格:
df <- data.frame(treatment=as.factor(c("A", "B")), value=c(1,2))
labels <- c(expression(""^14~CH[4]),
expression(""^14~CH[4]~"+"~"SO"[4]^{2-''}))
library(ggplot2)
ggplot(df, aes(treatment, value)) +
geom_bar(stat="identity") +
scale_x_discrete(labels=labels)
Run Code Online (Sandbox Code Playgroud)
我可以去Photoshop来减少上标14和“C”之间的空间,但也许plotmath中有办法?请注意,这不会发生在最后带有上标的第二个表达式中。
经过bind_rows()一些大的 data.frames 之后,我最终得到一个像这样的 data.frame:
tmp <- data.frame(Query=c("A", "B", "C", "D", "A"), target=c("D", "A", "A", "A", "B"), values=runif(5))
tmp
Query target values
1 A D 0.06075322
2 B A 0.43179750
3 C A 0.32325309
4 D A 0.26714620
5 A B 0.96854999
Run Code Online (Sandbox Code Playgroud)
我需要删除之前在任一方向上出现过的包含Query和组合的所有行target(AxD 是 DxA 的重复项)。在示例中,所需的输出为(因为第 4 行是第 1 行的重复项,第 5 行是第 2 行的重复项)
tmp
Query target values
1 A D 0.06075322
2 B A 0.43179750
3 C A 0.32325309
Run Code Online (Sandbox Code Playgroud)
非常感谢!
这个例子工作正常:
library(ggplot2)
ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() +
theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"),
legend.title = element_text(size=12, face="bold"),
axis.title.x=element_text(face="bold", vjust=0.1),
axis.title.y=element_text(face="bold", vjust=0.4))
Run Code Online (Sandbox Code Playgroud)
在我自己的图中,“face”参数是有问题的:
ggplot()+
#geom_point(data=sitescores2, aes(x=rda1, y=rda2, color=Dates), shape=17)+
geom_segment(data=biplotscores2, aes(x=0, y=0, xend=rda1, yend=rda2), arrow=arrow(length=unit(0.2,"cm")), alpha=0.75, color="black") +
geom_text(data=biplotscores2, aes(x=1.1*rda1, y=1.1*rda2,label=rownames(biplotscores2)), size=3, color="black", face="bold")+
#xlab("rda1 (45.7% explained variance)")+
#ylab("rda2 (19.3% explained variance)")+
#annotate ("text", x = 0.5, y = -0.75, label = "Constrained Inertia 20.3%") +
theme_bw()+
theme(panel.border = element_blank(), panel.grid.major = …Run Code Online (Sandbox Code Playgroud) 我有一个包含排序整数的 36 个向量的列表,其中包括许多零。
List of 36
$ R11: int [1:361] 241 240 239 349 238 237 236 235 234 233 ...
$ R12: int [1:361] 287 286 285 350 284 283 282 281 280 279 ...
Run Code Online (Sandbox Code Playgroud)
我不知道如何从向量中删除零。我试过了lapply (list, list(list x!=0),但这并不成功。谢谢你。
我想计算列表中成对镜像矩阵的均值和标准偏差,并为进一步的文本处理编写一个表:
mean_SG<- as.data.frame(lapply(list_SG, function(x) mean(x[upper.tri(x)])))
sd_SG <- as.data.frame(lapply(list_SG, function(x) sd(x[upper.tri(x)])))
write.table(t(rbind(round(mean_SG,3),round(sd_SG,3))), "SG.txt")
Run Code Online (Sandbox Code Playgroud)
我的想法是直接将mean_SG和sd_SG中的数值与正负符号±连接起来,然后用write.table将它写在一个列中.这可能在R?
这是一些数据:
SG <- structure(c(85, 84.016, 82.9, 79, 85.167, 83.467, 78.5, 83.051,
80.064, 81.436, 79.94, 83.731, 83.468, 82.775, 83.294, 81.608,
82.176, 84.138, 82.6, 85.325, 82.297, 81.546, 83.569, 84.561,
87.039, 92.45, 86.35, 83.153, 84.447, 81.899, 81.972, 81.32,
81.949, 82.101, 0.656, 0.966, 1.833, NA, 0.643, 0.459, 0.608,
1.189, 1.024, 0.848, 1.207, 0.66, 0.757, 1.235, 0.872, 1.308,
0.958, 1.151, 0.914, 1.302, 0.708, 0.79, 1.349, 0.799, 1.297,
2.554, 0.55, 1.041, 1.216, 1.065, …Run Code Online (Sandbox Code Playgroud) 我有以下向量:
a <- c("abc_lvl1", "def_lvl2")
Run Code Online (Sandbox Code Playgroud)
我基本上想分成两个向量:
("abc", "def")和("lvl1", "lvl2).我知道如何用sub替换:
sub(".*_", "", a)
[1] "lvl1" "lvl2"
Run Code Online (Sandbox Code Playgroud)
我认为这可以转化为"在"_"之前搜索任意数量的任何字符,并且一无所获." 因此 - 我想 - 这应该给我另一个所需的矢量:
sub("_*.", "", a),但它只删除了主角:
[1] "bc_lvl1" "ef_lvl2"
Run Code Online (Sandbox Code Playgroud)
我在哪里陷入困境?这基本上等同于excel中的"text-to-columns"功能.