-3

非常感谢您的帮助。

是的。我应该提供一个更好的例子。

这是我的输入文件(3columns.csv)

    Patients    Markers Studies
1   AA         EXX         1111
2   BB         ABCB1           2222|3333|5555|6666
3   CC         CCAN        4444|5555
4   DD         ABCB1           6666

这是我的输出文件

    Patients    Markers Studies
1   AA         EXX         1111
2   BB         ABCB1           2222
2   BB         ABCB1           3333
2   BB         ABCB1           5555
2   BB         ABCB1           6666
3   CC         CCAN        4444
3   CC         CCAN        5555
4   DD         ABCB1           6666

(1) 根据以下命令,我对第 6 行做了一些更改,如下所示

sapply(unlist(strsplit(as.character(df[x,3]),"\\|")),c,df[x,1:2],USE.NAMES=FALSE) 

(2) 我试图将 df 文件调用为

df <- read.csv(file="3columns.csv",header=TRUE,stringsAsFactors=FALSE)

\\(3)我之前也试过添加|

所有这些方法都不起作用,所以我怀疑我可能误解了下面的回复。你能不能再给我一些指导?

最好的问候,凯瑟琳

------原始问题--------------

我想使用 R 的strsplit命令根据符号分隔单元格"|"

但是,会出现一条错误消息:

Error in strsplit(df[x, 3], "|") : non-character argument.

这个错误信息是什么意思?

我该如何纠正这个错误?

我正在使用本网站上一个问题中列出的命令行:

> write.csv(df, file="3columns.csv")
> as.data.frame(   
+ t(     
+ do.call(cbind,       
+ lapply(1:nrow(df),function(x){         
+ sapply(unlist(strsplit(df[x,3],"|")),c,df[x,1:2],USE.NAMES=FALSE)       
+ })     
+ )   
+ ) 
+ )
4

2 回答 2

8

如果没有最小的可重现示例,很难看出实际出了什么问题。但strsplit(df[x, 3], "|")由于|符号是字符中的特殊情况(or 的正则表达式),因此不起作用。您实际上需要双重转义:

strsplit("ab|cd",split="\\|")
于 2011-04-08T14:39:32.650 回答
2

|是正则表达式中使用的特殊字符。您需要转义|with\\以获得您想要的效果:

x <- "abc|xyz|123|456|foo|bar|baz|bat|wheee"

strsplit(x, "\\|")

[[1]]
[1] "abc"   "xyz"   "123"   "456"   "foo"   "bar"   "baz"   "bat"   "wheee"

查看?regex并搜索“特殊字符”以查找整个字符列表。

于 2011-04-08T14:42:46.540 回答