将一行中的文本分成多行

时间:2019-01-23 11:50:02

标签: r stringr

我有以下数据集:

Class      Range      Value
A          6 - 8      19
B          1 - 3      14
C          5 - 16     10
D          4 - 7      5

我想将每个类的范围分为两列。为此,我使用函数str_split_fixed如下:

merge(data, str_split_fixed(data[, 2], " - ", 2))

我什至尝试过

merge(data, str_split_fixed(data$Range, " - ", 2))

但是他们两个给我以下结果:

Class      Range      Value    V1     V2
A          6 - 8      19       6      8
B          1 - 3      14       6      8
C          5 - 16     10       6      8
D          4 - 7      5        6      8

我的问题是,为什么在其余的课程中都重复第一个范围?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

str_split_fixed的输出是两列matrix(无暗名),当我们在未指定列名的情况下执行merge时,它会进行交叉联接。除了merge,我们可以使用cbind或分配给两列

data[c('V1', 'V2')] <- str_split_fixed(data[, 2], " - ", 2)

注意:str_split的输出是character类型的元素。它可能需要转换为numeric


一个更简单的选择是separate

library(tidyverse)
data %>%
    separate(Range, into = c("V1", "V2"), convert = TRUE)
#   Class V1 V2 Value
#1     A  6  8    19
#2     B  1  3    14
#3     C  5 16    10
#4     D  4  7     5