小编Ste*_*ner的帖子

要在R中列出的文本文件

我有一个大文本文件,每行有可变数量的字段.每行中的第一个条目对应于生物学途径,并且每个后续条目对应于该途径中的基因.前几行可能看起来像这样

path1   gene1 gene2
path2   gene3 gene4 gene5 gene6
path3   gene7 gene8 gene9
Run Code Online (Sandbox Code Playgroud)

我需要将此文件作为列表读入R中,每个元素都是一个字符向量,列表中每个元素的名称是该行的第一个元素,例如:

> pathways <- list(
+     path1=c("gene1","gene2"), 
+     path2=c("gene3","gene4","gene5","gene6"),
+     path3=c("gene7","gene8","gene9")
+ )
> 
> str(pathways)
List of 3
 $ path1: chr [1:2] "gene1" "gene2"
 $ path2: chr [1:4] "gene3" "gene4" "gene5" "gene6"
 $ path3: chr [1:3] "gene7" "gene8" "gene9"
> 
> str(pathways$path1)
 chr [1:2] "gene1" "gene2"
> 
> print(pathways)
$path1
[1] "gene1" "gene2"

$path2
[1] "gene3" "gene4" "gene5" "gene6"

$path3
[1] "gene7" "gene8" "gene9"
Run Code Online (Sandbox Code Playgroud)

...但我需要自动完成数千行.我之前在这里 …

statistics text r list

29
推荐指数
2
解决办法
4万
查看次数

删除重复项,保持具有最大绝对值的条目

假设我有四个样本:id = 1,2,3和4,每个样本都有一个或多个测量值:

> a <- data.frame(id=c(1,1,2,2,3,4), value=c(1,2,3,-4,-5,6))
> a
  id value
1  1     1
2  1     2
3  2     3
4  2    -4
5  3    -5
6  4     6
Run Code Online (Sandbox Code Playgroud)

我想删除重复项,每个ID只保留一个条目 - 具有"value"列绝对值最大的条目.即,这就是我想要的:

> a[c(2,4,5,6), ]
  id value
2  1     2
4  2    -4
5  3    -5
6  4     6
Run Code Online (Sandbox Code Playgroud)

我怎么能在R中这样做?

r duplicates duplicate-removal

28
推荐指数
5
解决办法
2万
查看次数

dplyr:inner_join,部分字符串匹配

我想加入两个数据帧,如果seed在数据帧列y是对部分匹配stringx.这个例子应该说明:

# What I have
x <- data.frame(idX=1:3, string=c("Motorcycle", "TractorTrailer", "Sailboat"))
y <- data_frame(idY=letters[1:3], seed=c("ractor", "otorcy", "irplan"))


x

  idX         string
1   1     Motorcycle
2   2 TractorTrailer
3   3       Sailboat

y

Source: local data frame [3 x 2]

    idY   seed
  (chr)  (chr)
1     a ractor
2     b otorcy
3     c irplan


# What I want
want <- data.frame(idX=c(1,2), idY=c("b", "a"), string=c("Motorcycle", "TractorTrailer"), seed=c("otorcy", "ractor"))

want

  idX idY         string   seed
1   1   b     Motorcycle …
Run Code Online (Sandbox Code Playgroud)

string join r stringr dplyr

19
推荐指数
4
解决办法
7481
查看次数

按ID列折叠所有列

我正在尝试做类似于这里所回答的事情,这让我有80%的路要走.我有一个带有一个ID列和多个信息列的数据框.我想汇总所有其他列,以便每个ID只有一行,并且多个条目由例如分号分隔.这是我拥有的和我想要的一个例子.

有:

     ID  info1          info2
1 id101    one          first
2 id102   twoA second alias A
3 id102   twoB second alias B
4 id103 threeA  third alias A
5 id103 threeB  third alias B
6 id104   four         fourth
7 id105   five          fifth
Run Code Online (Sandbox Code Playgroud)

想:

     ID          info1                          info2
1 id101            one                          first
2 id102     twoA; twoB second alias A; second alias B
3 id103 threeA; threeB   third alias A; third alias B
4 id104           four                         fourth
5 id105           five …
Run Code Online (Sandbox Code Playgroud)

r dplyr

14
推荐指数
3
解决办法
7455
查看次数

使用Rmarkdown嵌入Rmarkdown,无需编织评估

我想演示如何编写RMarkdown,其中所述RMarkdown演示嵌入在用于创建课程材料的RMarkdown文档中.在这个有围栏的代码块中,我希望knitr执行这个块.

我想把这样的东西放到我的"顶级"Rmarkdown文档中,并且让外部栅栏之间的所有内容在输出HTML文档中以固定宽度逐字打印,而不是让knitr评估内部嵌入的R代码块和内联代码.

```
---
title: "RMarkdown teaching demo"
author: "whoever"
---

# Major heading

Here's some text in your RMarkdown document. Here's a code chunk:

```{r, eval=FALSE}
head(mtcars)
```

Now we're back into regular markdown in our embedded document.

Here's inline code that I don't want executed either; 
e.g. mean of mpg is `r mean(mtcars$mpg)`.

```
Run Code Online (Sandbox Code Playgroud)

在knitr示例65中尝试过零宽度空间技巧,但是在尝试编译为PDF时失败(我需要HTML和PDF).

r knitr r-markdown

14
推荐指数
2
解决办法
1295
查看次数

如何找到一个Windows行尾(EOL)字符

我需要使用Cygwin中的unix paste实用程序将几百GB的数据粘贴在一起,但如果文件中有Windows EOL字符,它将无法正常工作.数据可能有也可能没有Windows EOL字符,如果不需要,我不想花时间运行dos2unix.

所以我的问题是,在Cygwin中,我怎么能弄清楚这些文件是否有Windows EOL CRLF字符?

我已经尝试创建一些测试数据并运行

sed -r 's/\r\n//' testdata.txt
Run Code Online (Sandbox Code Playgroud)

但无论dos2unix是否已运行,这似乎都匹配.

谢谢.

unix linux dos2unix sed eol

11
推荐指数
1
解决办法
1万
查看次数

Perl(或R或SQL):计算字符串在列之间出现的频率

我有一个看起来像这样的文本文件:

gene1   gene2   gene3
a       d       c
b       e       d
c       f       g
d       g       
        h
        i
Run Code Online (Sandbox Code Playgroud)

(每列都是一个人类基因,每个都包含可变数量的蛋白质(字符串,这里显示为字母),可以与这些基因结合).

我想要做的是计算每个字符串表示的列数,输出该数字和所有列标题,如下所示:

a   1   gene1
b   1   gene1
c   2   gene1 gene3
d   3   gene1 gene2 gene3
e   1   gene2
f   1   gene2
g   2   gene2 gene3
h   1   gene2
i   1   gene2
Run Code Online (Sandbox Code Playgroud)

我一直试图弄清楚如何在Perl和R中做到这一点,但到目前为止还没有成功.谢谢你的帮助.

mysql string perl r

9
推荐指数
3
解决办法
411
查看次数

Knitr:opts_chunk $ set()在Rscript命令中不起作用

我正在使用knitr从Rmd创建一个markdown文件,我在.Rmd脚本的顶部设置了以下选项来隐藏所有结果和图:

```{r, echo=FALSE}
opts_chunk$set(results="hide", fig.show="hide")
```
Run Code Online (Sandbox Code Playgroud)

当我点击RStudio中的Knit HTML按钮时,这是有效的 - 我得到没有结果和数字的输出.但是,如果我从命令行运行:

Rscript -e 'knitr::knit("myfile.Rmd")'
Run Code Online (Sandbox Code Playgroud)

它似乎opts_chunk$set()没有读取行,我在.md输出中得到结果和图.我通过在Rscript命令中指定这些选项来解决这个问题:

Rscript -e 'library(knitr); opts_chunk$set(results="hide", fig.show="hide"); knit("myfile.Rmd")'
Run Code Online (Sandbox Code Playgroud)

但我宁愿保留从我正在使用的文件中读取的所有选项,而不是在命令行中指定.knit在命令行中使用Rscript 时如何获取.Rmd文件中读取的选项?

谢谢.

r knitr

8
推荐指数
1
解决办法
4791
查看次数

R函数中的默认参数(形式参数由多个实际参数匹配)

简单的问题,我希望.我想编写一个绘图函数,如果用户没有指定,则该函数具有y轴标签的默认值.我还想允许...其他绘图参数的参数,并允许用户ylab手动设置.但我无法弄清楚如何做到这一点.

# simple scatterplot function with a default ylab
scatter <- function(x,y, ...) {
    plot(x, y, ylab="Default y-axis label", ...)
}

# generate data
x <- rnorm(100)
y <- x+rnorm(100)

# use the default
scatter(x,y)

# here I want to use my own label, but I get an error!
scatter(x, y, ylab="New y-axis label")
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Error in plot.default(x, y, ylab = "Default y-axis label", ...) : 
  formal argument "ylab" matched by multiple actual arguments 
Run Code Online (Sandbox Code Playgroud)

我理解这个问题,但我不知道修复它的最佳方法.谢谢您的帮助!

编辑: …

r function argument-passing

7
推荐指数
2
解决办法
1万
查看次数

使用sed用逗号替换前两个空格

我有一个以空格分隔的文件,每行有一个可变数量的条目.我想用逗号替换前两个空格来创建一个包含三列的逗号分隔文件.

这是我的意见:

a b  1 2 3 3 2 1
c d  44 55 66 2355
line http://google.com 100 200 300
ef jh  77 88 99
z y 2 3 33
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出:

a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line,http://google.com,100 200 300
ef,jh,77 88 99
z,y,2 3 33
Run Code Online (Sandbox Code Playgroud)

我正在尝试在sed命令中使用perl正则表达式,但我无法让它工作.首先我尝试捕获一个单词,然后是空格,然后是另一个单词,但这仅适用于第1,2和5行:

$ cat test | sed -r 's/(\w)\s+(\w)\s+/\1,\2,/'
a,b,1 2 3 3 2 1
c,d,44 55 66 2355
line http://google.com 100 200 300
ef jh  77 88 99
z,y,2 …
Run Code Online (Sandbox Code Playgroud)

regex perl command-line parsing sed

6
推荐指数
1
解决办法
1万
查看次数