我遇到了找到正确的正则表达式以将单列分隔为两列的麻烦。使用正则表达式分隔列
这是我的例子。
Col 1
8.3 algo y algo mas
我想这
Col 1 Col 2
8.3 algo y algo mas
我一直在尝试此代码。
library(tidyverse)
base <- base %>%
separate(col 1, into c("col 2", "col 3"), sep = "\\s")
我遇到了找到正确的正则表达式以将单列分隔为两列的麻烦。使用正则表达式分隔列
这是我的例子。
Col 1
8.3 algo y algo mas
我想这
Col 1 Col 2
8.3 algo y algo mas
我一直在尝试此代码。
library(tidyverse)
base <- base %>%
separate(col 1, into c("col 2", "col 3"), sep = "\\s")
为了安全起见,我认为这是最好的一个容易识别的字符数后替换每一个空间......
df[, 'Col 1'] <- gsub(pattern = '^([0-9\\.]+) ', replacement = '\\1_', x = df[, 'Col 1'])
然后我会用separate
:
df <- separate(data = df, col = 'Col 1', into = c('Col 1', 'Col 2'), sep = '_')
我也会改变列名,因为空间通常是一个问题,当我列名称...尝试改为col_1
之类的内容。
谢谢你的回答,但是,有一个问题,当我运行你的代码时,colums将第一个数字分开。可能是我运行错了你的代码。我在这个环境中非常新。 –
是的,我应该注意到,作为分隔符的点不会很好,因为你已经有了原始数据中的点。我改变了分隔符,请让我知道如果这现在适合你。 –
您可以从stringr
和rebus
尝试的功能:
df <- data.frame(Col_1 = "8.3 algo y algo mas")
library(stringr)
library(rebus)
str_match(df$Col_1, pattern = capture(DGT %R% DOT %R% DGT) %R%
SPC %R%
capture(one_or_more(or(SPC, LOWER))))
的rebus
包允许您使用人类可读的代码来构建一块正则表达式件。输出结果如下:
# [,1] [,2] [,3]
# [1,] "8.3 algo y algo mas" "8.3" "algo y algo mas"
谢谢你的回答,这非常有帮助 –
因此,您的整个前提取决于第1列是非空白值,第2列是剩余的吗? – sln
您需要“进入”以获取与分隔字符串一样多的名称。如果你使用“\\ s”,它会将它分成5而不是2. – Kevin
如果你确定列之间会有3个或更多的空格,试试'sep =“\\ s {3,}”'。根据需要调整值。 –