根据特定标记从数据框中拆分字符列

时间:2015-11-18 01:02:43

标签: r split dplyr

我有一个数据框df,第一列看起来像这样:

[1] "760–563" "01455–1" "4672–04" "11–31234" "22–12" "11111–53" "111–21" "17–356239" "14–22352" "531–353"

我想将该列拆分为-

我正在做的是

strsplit(df[,1], "-")

问题在于它不起作用。它返回一个列表而不拆分元素。我已经尝试添加参数fixed = TRUE并对split参数进行常规表达,但没有任何效果。

奇怪的是,如果我自己复制专栏,例如:

myVector <- c("760–563" "01455–1" "4672–04" "11–31234" "22–12" "11111–53" "111–21" "17–356239" "14–22352" "531–353")

然后应用strsplit,它有效。

我已经使用

检查了我的列类型和类

class(df[,1])typeof(df[,1])两者都返回character,所以很好。

我也在使用带有dplyr的数据帧,因此它的类型为tbl_df。我把它转换回dataframe但是也没有用。

还尝试了apply(df, 2, function(x) strsplit(x, "-", fixed = T)),但也没有用。

任何线索?

2 个答案:

答案 0 :(得分:5)

我不知道你是怎么做到的,但你有两种不同类型的破折号:

var dateStr = JSON.parse(date);
var realDate = new Date(dateStr);

所以charToRaw(substr("760–563", 4, 4)) #[1] 96 charToRaw("-") #[1] 2d 工作正常,只是原始数据中没有破折号。调整一下,然后离开:

strsplit()

答案 1 :(得分:2)

您可以拆分非数字字符

library(dplyr)
library(tidyr)

data %>%
  separate(your_column, 
           c("first_number", "second_number"),
           sep = "[^0-9]")