非常感谢你的帮助。
是。我应该提供一个更好的例子。
这是我的输入文件(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)
+ })
+ )
+ )
+ )
答案 0 :(得分:6)
如果没有最小的可重复性示例,很难看出实际出现了什么问题。但是strsplit(df[x, 3], "|")
不起作用,因为|
符号是字符中的特殊情况(正则表达式为或)。你实际上需要双重逃避:
strsplit("ab|cd",split="\\|")
答案 1 :(得分: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
并搜索“特殊字符”以查找整个字符列表。