如果可变数量的数据,则拆分列data.frame

时间:2015-05-12 07:15:03

标签: r dataframe strsplit

我想根据'_'拆分下面y的{​​{1}}列,但我的数据不完整。 (df只是较大df)的代表性部分。

data.frame

我尝试过使用:

df <- data.frame(x = 1:10,
                 y = c("vuh_ftu_yefq", "sos_nvtspb", "pfymm_ucms",
                       "tucbexcqzh", "n_zndbhoun", "wdetzaolvn",
                       "lvohrpdqns", "wso_bsqwvr", "wx_gbkbxjl",
                       "t_dbxkkvge"))

但是我收到错误,因为每个列表中的件数不同。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您可以使用separate中的tidyr功能。

# required package
require(tidyr)
# separate (removing the y column)
separate(df, y, paste0("z", 1:3), sep = "_", extra = "merge")
# separate without removing the y column
separate(df, y, paste0("z", 1:3), sep = "_", extra = "merge", remove = FALSE)

答案 1 :(得分:1)

假设:

  • )需要在您的示例中关闭df。
  • incomplete data表示从左侧填写,以便没有干预&#39; _&#39;是第一个或基准。

tidyr&#39; s separate()

result <- separate(df, y, into = c("z1","z2","z3") , sep ='_', extra = "drop")
  • 这里的密钥是extra = "drop",根据文档,它总是通过删除或扩展来返回长度(分成)

data.table&#39; s tstrsplit()

DT <- as.data.table(df)
result <- DT[, c("z1", "z2","z3") := tstrsplit(y, '_', fixed=TRUE)][]
  • tstrsplit()的默认行为可以满足您的需求,而fixed=TRUE则会传递到下面的strsplit()以保持仓促。

注意:如果从右侧填写了不完整的数据,则需要在此处取消混合变量!!!