使用tidyr中的separate()将字母代码分离为r中的4个变量

使用tidyr中的separate()将字母代码分离为r中的4个变量,r,tidyr,R,Tidyr,我有fish ID的数据,ID变量由四个字母组成,第一个字母表示亲子关系,第二个字母表示母性,第三个字母表示治疗,第四个字母表示个人。单个观察结果可能如下所示BBRG 此数据作为单个变量,我需要将这些字母拆分为单独的列,因为它们之间没有任何分隔,我不确定在sep=中的sep=参数中放置什么 示例数据: test.dataframe <- data.frame(observation = c(1:10), VIE.Code = c("

我有fish ID的数据,ID变量由四个字母组成,第一个字母表示亲子关系,第二个字母表示母性,第三个字母表示治疗,第四个字母表示个人。单个观察结果可能如下所示
BBRG

此数据作为单个变量,我需要将这些字母拆分为单独的列,因为它们之间没有任何分隔,我不确定在
sep=
中的
sep=
参数中放置什么

示例数据:

test.dataframe <- data.frame(observation = c(1:10),
                             VIE.Code = c("BBRG", "BRBR", "PPWG", "RRWW",
                                          "WRWR", "BBBP", "PBPB", "PPGW",
                                          "RWRW", "BGBG"))

test.dataframe我们可以使用regex lookaround

library(tidyverse)
df1 %>% 
  separate(ID, into = c("paternity", "maternity", "treatment", "individual"), 
             sep="(?<=[A-Z])")

一种
baser
方法是拆分

do.call(rbind, strsplit(df1$ID, ""))
数据
df1您好,这是一个听起来非常好的方法,但我已经在我的数据集上尝试过了,并且在UseMethod(“separate_u”)中得到了错误错误:没有适用于“factor”类对象的“separate_u”的方法是我的ID变量格式错误的?@T.Miller它也应该适用于
factor
。如果有问题,请尝试
df1%>%mutate(ID=as.character(ID))%>%separate(ID,…
FYI,
separate
是一个
tidyr
函数,而不是
dplyr
函数。我也编辑过,如果没有一个,很难很好地提供帮助。这包括发布一个有代表性的数据样本,你尝试过的代码没有起作用,以及期望的结果。否则,我们就有点不知道发生了什么你可以编辑你的问题,把代码放在那里,这比在commentsHi中更容易阅读和格式化。谢谢你的回答,我理解并附上了一些代码,我用它们创建了一个类似但简单的数据框,我正试图在其上进行测试(如降价帮助中所述)但它不起作用
do.call(rbind, strsplit(df1$ID, ""))
df1 <- data.frame(ID = c("BBRG", "BBGR"), stringsAsFactors = FALSE)