tidyr 仅分离最后 n 个实例
tidyr separate only last n instances
我在 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")
产生:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp sd Nadd_belowCanopy
4 resp sd NPadd_belowCanopy
多个实例合并为一列。但是请注意,在所描述的情况下,第一个实例 varName 'resp_sd' 包含与
通过分隔因素来使用(处理和冠层位置)。但是合并只发生在最后一个实例上。
因此,在上面示例的最后一行中,我希望提取:'resp_sd'、'NPadd'、'belowCanopy'.
如何合并第一个实例而不是最后一个实例,以便仅分离最后 n 个实例?
在筛选已经回答过的类似问题时,我在中发现了tidyr::extract
,可以用来做这个工作:
tmp2 %>% extract(
"varTreatName", c("varName","treatment","canopyPosition")
, regex = "(.*)_([^_]+)_([^_]+)$")
产生预期结果:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp_sd Nadd belowCanopy
4 resp_sd NPadd belowCanopy
tidyr::separate
采用正则表达式,所以你也可以这样做:
library(dplyr)
library(tidyr)
tmp2 %>%
separate("varTreatName", c("varName","treatment","canopyPosition"),
, sep = "_(?!s)", extra = "merge")
结果:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp_sd Nadd belowCanopy
4 resp_sd NPadd belowCanopy
我在 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")
产生:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp sd Nadd_belowCanopy
4 resp sd NPadd_belowCanopy
多个实例合并为一列。但是请注意,在所描述的情况下,第一个实例 varName 'resp_sd' 包含与 通过分隔因素来使用(处理和冠层位置)。但是合并只发生在最后一个实例上。
因此,在上面示例的最后一行中,我希望提取:'resp_sd'、'NPadd'、'belowCanopy'.
如何合并第一个实例而不是最后一个实例,以便仅分离最后 n 个实例?
在筛选已经回答过的类似问题时,我在tidyr::extract
,可以用来做这个工作:
tmp2 %>% extract(
"varTreatName", c("varName","treatment","canopyPosition")
, regex = "(.*)_([^_]+)_([^_]+)$")
产生预期结果:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp_sd Nadd belowCanopy
4 resp_sd NPadd belowCanopy
tidyr::separate
采用正则表达式,所以你也可以这样做:
library(dplyr)
library(tidyr)
tmp2 %>%
separate("varTreatName", c("varName","treatment","canopyPosition"),
, sep = "_(?!s)", extra = "merge")
结果:
varName treatment canopyPosition
1 resp Nadd belowCanopy
2 resp NPadd belowCanopy
3 resp_sd Nadd belowCanopy
4 resp_sd NPadd belowCanopy