r - 如何拆分 R 中的列?

标签 r split

我也想用同样的方式拆分同一列。我想按照以下方式执行此操作,但它无法正常工作。

我使用的代码是 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/

相关文章:

r - 仅选择出现在其他因素的每个水平中的那些水平的因素

r - 在自定义函数中应用 dist 函数 rowise

r - 如何根据特定字符包装字符向量?

SQL - 将单列分成多列

ruby - Ruby 中的特殊字符串拆分

R:当 x 在 y 中明确显示时,grep 返回 0(我没有检查空格)

r - R中时间序列数据的拆分应用聚合

java - 在 Apache Camel 中访问拆分 entrySet 的主体

java - Java 中替换字符串时遇到问题

mysql - 如何将一个表拆分为多个表