如果件数可变 data.frame,则拆分列
split column if variable number of pieces data.frame
我想根据“_”拆分下面 df
的第 y
列,但我的数据不完整。 (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"))
我试过使用:
df$z <- strsplit(df$y,'_')
但是我得到一个错误,因为每个列表中的碎片数量不同。
我该怎么做?
您可以使用 tidyr
中的 separate
函数。
# 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)
假设:
)
需要在您的示例中关闭 df。
incomplete data
表示它从左侧填充,这样一个没有插入 '_' 的值是第一个或数据。
tidyr
的separate()
:
result <- separate(df, y, into = c("z1","z2","z3") , sep ='_', extra = "drop")
- 这里的关键是
extra = "drop"
,根据文档 总是 returns 长度(成)片,根据需要删除或扩展 。
data.table
的tstrsplit()
DT <- as.data.table(df)
result <- DT[, c("z1", "z2","z3") := tstrsplit(y, '_', fixed=TRUE)][]
tstrsplit()
的默认行为会满足您的需要,fixed=TRUE
会传递给下面的 strsplit()
以保持仓促。
注意:如果你的不完整数据是从右边填充的,你需要在这里取消你的变量!!!
我想根据“_”拆分下面 df
的第 y
列,但我的数据不完整。 (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"))
我试过使用:
df$z <- strsplit(df$y,'_')
但是我得到一个错误,因为每个列表中的碎片数量不同。
我该怎么做?
您可以使用 tidyr
中的 separate
函数。
# 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)
假设:
)
需要在您的示例中关闭 df。incomplete data
表示它从左侧填充,这样一个没有插入 '_' 的值是第一个或数据。
tidyr
的separate()
:
result <- separate(df, y, into = c("z1","z2","z3") , sep ='_', extra = "drop")
- 这里的关键是
extra = "drop"
,根据文档 总是 returns 长度(成)片,根据需要删除或扩展 。
data.table
的tstrsplit()
DT <- as.data.table(df)
result <- DT[, c("z1", "z2","z3") := tstrsplit(y, '_', fixed=TRUE)][]
tstrsplit()
的默认行为会满足您的需要,fixed=TRUE
会传递给下面的strsplit()
以保持仓促。
注意:如果你的不完整数据是从右边填充的,你需要在这里取消你的变量!!!