将列值转换为R中的有序其他数据帧
大家好,我需要帮助将列值转换为有序的其他数据帧 这是df1的将列值转换为R中的有序其他数据帧,r,dplyr,R,Dplyr,大家好,我需要帮助将列值转换为有序的其他数据帧 这是df1的 Groups Species Values Clusters 1 G1 Cattus_cattus 10 C1,C2,C3 2 G1 Cattus_cattus 10 C7,C8 3 G1 Cattus_cattus 10 C9 4 G2 Canis_lupus 2 C4,C5 5 G2 Canis_lupus
Groups Species Values Clusters
1 G1 Cattus_cattus 10 C1,C2,C3
2 G1 Cattus_cattus 10 C7,C8
3 G1 Cattus_cattus 10 C9
4 G2 Canis_lupus 2 C4,C5
5 G2 Canis_lupus 2 C24
6 G3 Griseus_lupa 90 C22,C78
7 G4 Griseus_lupa 89 C19
从df1$Groups中,我想创建一个有序的df2,其中有4个空行(colnames将df1$Groups中的值排序为df1,例如
df2
:
rows C1 C2 C3 C7 C8 C9 C4 C5 C24 C22 C78 C19
1 row1 NA NA NA NA NA NA NA NA NA NA NA NA
2 row2 NA NA NA NA NA NA NA NA NA NA NA NA
3 row3 NA NA NA NA NA NA NA NA NA NA NA NA
4 row3 NA NA NA NA NA NA NA NA NA NA NA NA
5 row4 NA NA NA NA NA NA NA NA NA NA NA NA
有人有主意吗
df1数据
structure(list(Groups = structure(c(1L, 1L, 1L, 2L, 2L, 3L, 4L
), .Label = c("G1", "G2", "G3", "G4"), class = "factor"), Species = structure(c(2L,
2L, 2L, 1L, 1L, 3L, 3L), .Label = c("Canis_lupus", "Cattus_cattus",
"Griseus_lupa"), class = "factor"), Values = c(10L, 10L, 10L,
2L, 2L, 90L, 89L), Clusters = structure(c(1L, 6L, 7L, 5L, 4L,
3L, 2L), .Label = c("C1,C2,C3", "C19", "C22,C78", "C24", "C4,C5",
"C7,C8", "C9"), class = "factor")), class = "data.frame", row.names = c(NA,
-7L))
我使用强大的data.table包解决了这个问题。我不确定我是否理解这样操作的目的,但我认为下面的代码解决了您的问题
库(data.table)
图书馆(stringr)
df1=结构(
列表(组=结构(c(1L、1L、1L、2L、2L、3L、4L),
.Label=c(“G1”、“G2”、“G3”、“G4”)、class=“factor”),
物种=结构(c(2L,
2L、2L、1L、1L、3L、3L),
.Label=c(“犬科狼疮”、“猫”,
“格里修斯·卢帕”,class=“factor”),
数值=c(10L、10L、10L、2L、2L、90L、89L),
簇=结构(c(1L、6L、7L、5L、4L、3L、2L),
.标签=c(“C1、C2、C3”、“C19”、“C22、C78”、“C24”、“C4、C5”,
“C7、C8、C9”,class=“factor”),
class=“data.frame”,row.names=c(NA,-7L))
setDT(df1)
newcols=unlist(str_split(df1$Clusters,“,”))
Nrows=uniqueN(df1$组)
Ncols=长度(newcols)
df2=数据表(行=粘贴0(“行”,1L:Nrows))
df2[,(newcols):=NA]
df2
#>行C1 C2 C3 C7 C8 C9 C4 C5 C24 C22 C78 C19
#>1:row1不,不,不,不,不,不
#>第2排:不,不,不,不,不,不
#>第3排:不,不,不,不,不,不,不
#>第4排:不,不,不,不,不,不,不
由(v1.0.0)于2021-03-17创建非常感谢您的帮助:)