我有以下数据集:
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
我的问题是,为什么在其余的课程中都重复第一个范围?有人可以帮忙吗?
答案 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