我想根据'_'拆分下面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"))
但是我收到错误,因为每个列表中的件数不同。
我该怎么做?
答案 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()
以保持仓促。注意:如果从右侧填写了不完整的数据,则需要在此处取消混合变量!!!