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

Thi*_*lbo 2 split r dplyr

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

[1] "760–563" "01455–1" "4672–04" "11–31234" "22–12" "11111–53" "111–21" "17–356239" "14–22352" "531–353"
Run Code Online (Sandbox Code Playgroud)

我想拆分那一栏-.

我正在做的是

strsplit(df[,1], "-")
Run Code Online (Sandbox Code Playgroud)

问题是它无法正常工作.它返回一个列表而不拆分元素.我已经尝试添加参数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")
Run Code Online (Sandbox Code Playgroud)

然后应用它strsplit,它的工作原理.

我已经检查了我的列类型和类

class(df[,1])而且typeof(df[,1])两者都归还给我character,所以这很好.

我也使用dplyr的数据帧,所以它是类型tbl_df.我把它转换回来dataframe但也没有用.

也试过,apply(df, 2, function(x) strsplit(x, "-", fixed = T))但也没有工作.

有线索吗?

the*_*ail 5

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

charToRaw(substr("760–563", 4, 4))
#[1] 96
charToRaw("-")
#[1] 2d
Run Code Online (Sandbox Code Playgroud)

所以strsplit()工作正常,只是原始数据中没有破折号.调整这个,离开你去:

strsplit("760–563", "–")
#[[1]]
#[1] "760" "563"
Run Code Online (Sandbox Code Playgroud)