【发布时间】:2016-01-31 00:46:02
【问题描述】:
我有一个表格,其中一列是这样的字符串:aaaaaaa_bbbbbb_ccccc_1111111
大约有 20000 行,我需要为每一行创建一个包含此子字符串的新列:aaaaaaa_bbbbbb_ccccc
经过一些研究,我发现使用"substring" 和"gregexpr" 对我有用,而且当我对每一行(或者如果我选择某行)使用这样的命令时,它确实可以正常工作:
for (i in 1:nrow(table)){
table$column[i] <-
substring(table$column[i], 1, (gregexpr("_", table$column[i])[[1]][3])-1)
}
但是我想在没有循环的情况下使用它:
table$column <- substring(table$column, 1, (gregexpr("_", table$column)[[1]][3])-1)
但在这种情况下,新列的子字符串与我想要的模式不匹配,有时它们是正确的,有时它们的长度是随机的。
有人知道导致这些奇怪结果的原因吗?
【问题讨论】:
-
你可以试试
table$column <- sub("(.*)_\\d+", "\\1", table$column) -
没有可重现的例子,不清楚那里发生了什么。你能提供一个小的可重现的例子来展示这种行为吗?否则,您可能会考虑另一种方法,例如 docendo discimus 建议的方法。
-
您应该不将列表分配给 data.frame 列。
-
@42 如果我是对的,我不会将列表分配给 data.frame...
gregexpr返回一个包含所有模式位置的列表。所以我使用列表中的特定项目来删除我不感兴趣的字符串部分。