我是法国工程专业的学生,我正在R大学里做一个项目。我实际上是在寻找与我的数据库相关的特定内容。
我的数据库看起来像这样:
id grades std_id UID
1004 1 1004 cm1_AZZ_005_LKJ_xxx
1004 1 1004 cm1_AZZ_002_LKJ_xxx
1004 0 1004 cm1_AZZ_005_LKJ_xxx
1004 1 1004 cm1_AZZ_002_LKJ_xxx
1004 0 1004 cm1_AZZ_002_LKJ_xxx
1004 1 1004 cm1_AZZ_009_LKJ_xxx
1004 1 1004 cm1_AZZ_002_LKJ_xxx
7687 1 0897 cm1_XYZ_457_HGF_xxx
7687 1 0897 cm1_XYZ_970_HGF_xxx
7687 1 0897 cm1_XBZ_674_KGH_xxx
7687 0 0897 cm1_XBZ_987_KGH_xxx
7687 1 0897 cm1_XBZ_780_KGH_xxx
.... ..... .... .....
我想使用列UID
中的值对数据库进行排序。
我的数据库较大,UID
内的值可能会低于数据库。
目前,我手动调整每个不同UID
的间隔,但它显然无效:
list_002 <- new_items[1:7]
list_003 <- new_items[8:9]
list_005 <- new_items[10:12]
正如您所看到的,我想使用UID
的前缀而不是所有字符对数据库进行排序。
Prefix : cm1_AZZ, cm1_XYZ, cm1_XBZ
在我的数据库中,UID
前缀始终为(cm1_AZZ,cm1_XYZ,cm1_XBZ),但后缀可能会更改。
我想根据UID
后缀&#34;(cm1_AZZ,cm1_XYZ,cm1_XBZ)&#34;在3个不同的列表中对数据库进行排序。每个UID
有3个不同的列表而不是不同的列表。
就像那样:
list_AAZ <- list()
list_XYZ <- list()
list_XBZ <- list()
list_AZZ <- cm1_AZZ_005 list_XYZ <- cm1_XYZ_457
cm1_AZZ_002 cm1_XYZ_970
cm1_AZZ_005
cm1_AZZ_002
cm1_AZZ_002
cm1_AZZ_009
cm1_AZZ_002
list_X4Z <- cm1_XBZ_674
cm1_XBZ_987
cm1_XBZ_780
感谢帮助我。抱歉我的英语很差。
答案 0 :(得分:4)
使用split
和sub
即可:
# original answer (before question update):
# new_list <- split(df, sub("(cm1_\\d{3}).*", "\\1", df$UID))
# updated answer:
new_list <- split(df, sub("(cm1_[^_]+).*", "\\1", df$UID))
这将返回一个列表,其中每组UID组(不包括后缀)都是data.frame。
然后,您可以使用
访问元素new_list$cm1_AZZ
或
new_list[[2]]