我也想用同样的方式拆分同一列。我想按照以下方式执行此操作,但它无法正常工作。
我使用的代码是
t38kbat = read.table("test38kbat.txt", header = FALSE)
head(t38kbat)
t38kbat <- separate (t38kbat, V2, c("sp", "id", "gene_organism"), \\"|")
t38kbat <- separate (t38kbat, gene_organism, c("gene", "organism"), \\"_")
t38kbat <- unite (t38kbat, sp, sp, id, sep = "|")
当我运行脚本时我收到了错误
错误:“t38kbat <- separate (t38kbat, V2, c("sp", "id", "gene_organism"),\"中的意外输入
谁能指导我如何解决它。 谢谢
最佳答案
在基础 R 中,strsplit
命令将对这种形式的向量进行操作,但会生成一个列表,您必须进一步简化它。
在 tidyr
包中,有一个 separate
函数可以保留事物的数据帧性质。对于此用例,这可能更可取。
例如
> library(tidyr)
> a <- data.frame(x=1:3, y=c("a|b|c", "b|c|d", "d|e|f"))
> a
x y
1 1 a|b|c
2 2 b|c|d
3 3 d|e|f
> separate(a, y, c("a","b","c"), '\\|')
x a b c
1 1 a b c
2 2 b c d
3 3 d e f
要稍微充实 strsplit
解决方案,您将不得不使用有点笨拙的 cbinds
组合来实现
> cbind(a, do.call(cbind, strsplit(as.character(a$y), "\\|")))
x y 1 2 3
1 1 a|b|c a b d
2 2 b|c|d b c e
3 3 d|e|f c d f
编辑:还应该注意,如果您使用 tidyr
方法,您将不得不递归地使用它,可能与 unite
一起使用,以获得完整的行为。有点像
df <- separate(df, col, c("type", "subtype", "rawclass"), "\\|")
df <- separate(df, rawclass, c("class", "subclass"), "_")
df <- unite(df, sp, type, subtype, sep="|")
假设原始列名为 col
,并使用虚构的名称作为最终标题。
关于r - 如何拆分 R 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32099467/