我是R的新手。我的数据框的列名是这样的类型:
file_001 file_002 block_001 block_002 red_001 red_002 ....etc'
0.05 0.2 0.4 0.006 0.05 0.3
0.01 0.87 0.56 0.4 0.12 0.06
我想通过列名将它们拆分成组,以获得如下结果:
group_file
file_001 file_002
0.05 0.2
0.01 0.87
group_block
block_001 block_002
0.4 0.006
0.56 0.4
group_red
red_001 red_002
0.05 0.3
0.12 0.06
...etc'
我的档案很大。我没有一定数量的团体。 它只需要列名称的开头。
答案 0 :(得分:7)
在基础R中,您可以像这样使用sub
和split.default
来返回data.frames列表:
myDfList <- split.default(dat, sub("_\\d+", "", names(dat)))
返回
myDfList
$block
block_001 block_002
1 0.40 0.006
2 0.56 0.400
$file
file_001 file_002
1 0.05 0.20
2 0.01 0.87
$red
red_001 red_002
1 0.05 0.30
2 0.12 0.06
split.default
将根据第二个参数按变量拆分data.frames。在这里,我们使用sub
和正则表达式&#34; _ \ d +&#34;删除下划线及其后面的所有数值,以便返回拆分值&#34;阻止&#34;,&#34;文件&#34;和&#34;红色&#34;。
作为旁注,通常最好将这些data.frame保存在列表中,并通过lapply
等函数与它们一起使用。有关一些激励性的例子,请参阅格雷戈尔对this post的回答。
答案 1 :(得分:0)
谢谢lmo, 使用你的代码后,它没有按照我的意愿工作,但是由于你的指导,我得到了一个解决方案。
因此,为了划分数据帧列表:
myDfList <- split.default(dat, sub(x = as.character(names(dat)), pattern = "\\_.*", ""))
希望将来能帮助别人!