例如,如果您创建一个新的 R markdown 文件并将其另存为“test”。然后可以从普通 R 脚本中运行或部署此 test.Rmd 文件。目的是生成 HTML 格式的输出,而无需打开 .Rmd 文件。
我希望创建一个主文件来一次性为许多 Markdown 文件执行此操作;这将节省大量时间,因为您不必打开许多 Markdown 文件并等待每个文件完成。
List l有三个字符串,分别命名为一个,两个和三个.我想转换l为数据帧,我需要一个名为的附加列n.
l <- list(c("a", "b"), c("c", "d", "e"), c("e"))
n <- c("one", "two", "three")
Run Code Online (Sandbox Code Playgroud)
我可以使用循环来完成它,但我确信有更有效的方法可以做到这一点.
out <- NULL
for (i in 1:length(n)){
step <- rep(n[i], length(l[[i]]))
out <- c(out, step)}
df <- as.data.frame(unlist(l))
df$n <- out
df
# unlist(l) n
#1 a one
#2 b one
#3 c two
#4 d two
#5 e two
#6 e three
Run Code Online (Sandbox Code Playgroud) 下面的函数根据累积和是否达到某个最大值然后重新开始对向量中的值进行分组。
cs_group <- function(x, threshold) {
cumsum <- 0
group <- 1
result <- numeric()
for (i in 1:length(x)) {
cumsum <- cumsum + x[i]
if (cumsum > threshold) {
group <- group + 1
cumsum <- x[i]
}
result = c(result, group)
}
return (result)
}
Run Code Online (Sandbox Code Playgroud)
示例中的最大值为 10。第一组仅包括 9;因为将它与下一个值相加将导致总和为 12。下一组包括 3、2、2(+8 将导致值高于 10)。
test <- c(9, 3, 2, 2, 8, 5, 4, 9, 1)
cs_group(test, 10)
[1] 1 2 2 2 3 4 4 5 5
Run Code Online (Sandbox Code Playgroud)
但是,我更愿意在每组中包含导致累积总和高于最大值 10 …
snp1 <- c("AA", "AT", "AA", "TT", "AA", "AT", "AA", "AA", "AA", "AT")
snp2 <- c("GG", "GC", "GG", "CC", "CC", "GC", "GG", "GG", "GG", "GC")
df1 <- data.frame(snp1, snp2)
num1 <- c(1, 2, 1, 3, 1, 2, 1, 1, 1, 2)
num2 <- c(1, 2, 1, 3, 3, 2, 1, 1, 1, 2)
df2 <- data.frame(num1, num2)
Run Code Online (Sandbox Code Playgroud)
这是在R中完成的.我有一个对象df1,我想将其转换为df2.对于df1中的每一列,最常见的值转换为1,第二个最常见的值转换为2,等等.我该如何有效地做到这一点?
当使用基因组阵列数据时,通常将"探针"分配给不同的基因(不同的转录本).对象df显示了这样的一个例子.
df <- data.frame(c("geneA;geneB;geneB", "geneG", "geneC;geneD"))
colnames(df) <- "gene.names"
df#looks like this:
gene.names
1 geneA;geneB;geneB
2 geneG
3 geneC;geneD
Run Code Online (Sandbox Code Playgroud)
我想将所有元素拆分为df$gene.namesat ;并将每个子字符串放在一个新列中.NA如果连续不再有基因,可以使用.
这个脚本有效,但我想大多数人会同意这个贪婪的代码而且效率不高.有人可以提出更好的选择吗?
library(plyr)#load this library first
out <- NULL
for (i in 1:NROW(df)){
one <- as.data.frame(t(as.data.frame(strsplit(as.character(df[i,1]), ";"))))
out <- rbind.fill(out, one)
}
out#looks like this:
V1 V2 V3
1 geneA geneB geneB
2 geneG <NA> <NA>
3 geneC geneD <NA>
Run Code Online (Sandbox Code Playgroud) 这是一个玩具示例。我想在其中搜索a并提取b. 即使颜色不是以大写字母开头,我也想提取它。但是,输出应该告诉我颜色在a.
所以我想得到的答案是#"Red" NA "blue。
a <- "She has Red hair and blue eyes"
b <- c("Red", "Yellow", "Blue")
str_extract(a, b)#"Red" NA NA
Run Code Online (Sandbox Code Playgroud)
我str_extract从 'stringr' 开始使用,但很乐意使用另一个函数/包(例如,grep)。
这是玩具示例。我想比较ra,它给出了范围(例如,时间)和ev,它表示事件发生的时间。
我想创建一个新专栏hits,ra说明每个范围内发生了多少事件。
ra <- data.frame(a=c(0, 250, 500, 750), b=c(250, 500, 750, 900))
ra
a b
1 0 250
2 250 500
3 500 750
4 750 900
ev <- data.frame(events=c(1,1,1,1,1), time=c(100, 200, 450, 550, 600))
ev
events time
1 1 100
2 1 200
3 1 500
4 1 550
5 1 600
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的。
data.frame(a=c(0, 250, 500, 750), b=c(250, 500, 750, 900), hits=c(2,1,2,0))
a b hits
1 0 250 2
2 250 …Run Code Online (Sandbox Code Playgroud) 我正在尝试改变这个
data.frame(id=c(1,1,1,1,1,2,2), val=c('a','a','b','a','a','a','b'))
id val
1 1 a
2 1 a
3 1 b
4 1 a
5 1 a
6 2 a
7 2 b
Run Code Online (Sandbox Code Playgroud)
进入
id val
1 1 1
2 1 1
3 1 2
4 1 3
5 1 3
6 2 1
7 2 2
Run Code Online (Sandbox Code Playgroud)
对于每个id,值val均以1开头,val更改时以1递增。
这是一个有效的示例代码,但它不是最有效的.有人能用更少的步骤做到这一点吗?也许使用'lapply'?
set.seed(1)
A <- matrix(rexp(30, rate=.5), nrow = 6, ncol=5)
B <- rowMedians(A)
rownames(A) <- c('a', 'b', 'c', 'd', 'e', 'f')
res <- NULL
for (i in 1:NROW(A)){
one <- A[i,] / B[i]
res <- rbind(res, one)
}
rownames(res) <- rownames(A)
Run Code Online (Sandbox Code Playgroud)