【问题标题】:Replacing ^ and | sybmbols in a matrix替换 ^ 和 |矩阵中的符号
【发布时间】:2011-04-06 09:37:16
【问题描述】:

我有下表:

column1  column2
1        aaa^bbb
2        aaa^bbb|ccc^ddd

我想要一个输出文件如下:

column1   column2     column3
1         aaa         bbb
2         aaa         bbb
3         ccc         ddd

如果有聪明的方法可以让我知道吗?

更新:

我试图做两件事;

对于^,我想将上下文分离到第2列和第3列。

对于|,我想将它分隔到下一行,但在column1中保持相同的数字(column1对于第2行和第3行是相同的。对不起,我在这里犯了一个错误。

重写,输入如下:

column1  column2 
x        aaa^bbb 
y        aaa^bbb|ccc^ddd 

输出如下:

column1   column2     column3 
x         aaa         bbb 
y         aaa         bbb 
y         ccc         ddd 

【问题讨论】:

  • 凯瑟琳。我已经编辑了您的问题,因为它无法阅读。为了将来参考,请在发布问题时使用 SO 格式按钮。如果您粘贴文本,请使用编辑窗口顶部的 {} 按钮来指示某段文本是代码还是结果。然后它将以您想要的方式显示。
  • @Catherine:我已删除对 csv 文件的引用,因为您的问题与它们没有任何关系。相反,您的问题在于 data.frames/matrices。要将表格写入 csv 文件,请查看 write.csv

标签: r substitution


【解决方案1】:

最简单的方法就是使用strsplit。例如,

> x = c("aaa^bbb", "aaa^bbb|ccc^ddd")
> ## Split the vector on ^ OR |.
> ## Since ^ and | are special characters
> ## we need to escape them: \\^ and \\|
> ## Split by column.
> new_x = unlist(strsplit(x, "\\|"))
> ## Split by row
> new_x = unlist(strsplit(new_x, "\\^"))
> new_x
 [1] "aaa" "bbb" "aaa" "bbb" "ccc" "ddd"

> ## Change the vector back into a matrix
> dim(new_x) = c(2,3)
> ## Transpose to get correct shape
> t(new_x)
     [,1]  [,2] 
[1,] "aaa" "bbb"
[2,] "aaa" "bbb"
[3,] "ccc" "ddd"

您可能可以合并拆分步骤,但我对您的数据格式没有足够的了解,无法确信它始终有效。

【讨论】:

  • Catherine 的问题很难理解,因为她的问题格式不正确。我已经编辑了这个问题,但在我进行编辑之前需要同行评审。然后很明显,您需要在答案中使用 colsplit() 或类似方法来拆分列。
  • @Andre:感谢您的问题编辑,我只是​​在猜测凯瑟琳想要什么。
猜你喜欢
  • 2021-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 2016-04-24
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
相关资源
最近更新 更多