我在 R 中有一个 data.frame,为了简单起见,我想将其中的一列分开。下面的示例使用 tidyr::separate 进行了剪裁,几乎完成了这项工作:
tmp2 <- data.frame( varTreatName = c(
"resp_Nadd_belowCanopy", "resp_NPadd_belowCanopy"
, "resp_sd_Nadd_belowCanopy", "resp_sd_NPadd_belowCanopy"))
tmp2 %>% separate(
"varTreatName", c("varName","treatment","canopyPosition")
, extra = "merge")
Run Code Online (Sandbox Code Playgroud)
产生:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp sd Nadd_belowCanopy
4 resp sd NPadd_belowCanopy
Run Code Online (Sandbox Code Playgroud)
多个实例合并到一列中。但请注意,在所描述的情况下,第一个实例 varName 'resp_sd' 包含与分隔要分隔的因素(治疗和 canopyPosition)所使用的分隔符相同的分隔符。但合并仅发生在最后一个实例上。
因此,在上面示例的最后一行中,我希望提取:“resp_sd”、“NPadd”、“belowCanopy”。
如何合并第一个实例而不是最后一个实例,以便仅分离最后 n 个实例?
在筛选已经回答的类似问题时,我tidyr::extract在这个答案中发现,它可以用来完成这项工作:
tmp2 %>% extract(
"varTreatName", c("varName","treatment","canopyPosition")
, regex = "(.*)_([^_]+)_([^_]+)$")
Run Code Online (Sandbox Code Playgroud)
产生预期结果:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp_sd Nadd belowCanopy
4 resp_sd NPadd belowCanopy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1936 次 |
| 最近记录: |