2011-04-08 90 views
-2

非常感谢您的帮助。strsplit符号“|”导致R中的非字符错误信息

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

这里是我的输入文件(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

这不是一个论坛。这是一个Q/A网站。你应该问一个问题和人们的答案。如果你得到的信息需要澄清,那么你应该编辑你的问题是一个更好的问题。没有理智的问题是以“非常感谢你的帮助,是的,我应该提供一个更好的例子”。如果您认为您需要更好的示例,请编辑该问题并添加更好的示例。 – 2011-04-08 19:47:05

+0

错误消息告诉你,strsplit的内容不是一个字符向量。检查它是什么,并使其成为角色矢量。如果有疑问,请阅读帮助文件。 – 2011-04-08 19:51:01

回答

6

这是很难看到什么是真正走错了没有最小重复的例子。但strsplit(df[x, 3], "|")不起作用,因为|符号是字符中的特殊情况(正则表达式为或)。您实际上需要双重转义:

strsplit("ab|cd",split="\\|") 
2

|是在正则表达式中使用的特殊字符。你需要躲避|\\为了得到你之后的效果:

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

strsplit(x, "\\|") 

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

?regex并搜索“特殊字符”中找到人物的整个列表。