我想将data.frame拆分为基于data.frame所有列的行值/字符的列表。
我使用write.list {erer}
所以现在当我再次阅读它们时,它们看起来像这样:
虚拟数据
set.seed(1)
df <- cbind(data.frame(col1=c(sample(LETTERS, 4),"col1",sample(LETTERS, 7))),
data.frame(col2=c(sample(LETTERS, 4),"col2",sample(LETTERS, 7))),
data.frame(col3=c(sample(LETTERS, 4),"col3",sample(LETTERS, 7))))
col1 col2 col3
1 G E Q
2 J R D
3 N J G
4 U Y I
5 col1 col2 col3
6 F M A
7 W R J
8 Y X U
9 P I H
10 N Y K
11 B T M
12 E E Y
我想通过c("col1","col2","col3")
生成
[[1]]
col1 col2 col3
1 G E Q
2 J R D
3 N J G
4 U Y I
[[2]]
col1 col2 col3
1 F M A
2 W R J
3 Y X U
4 P I H
5 N Y K
6 B T M
7 E E Y
使用split
感觉它应该很简单,但到目前为止我的尝试都失败了。此外,如您所见,我无法按某个行间隔进行拆分。
任何指针都将受到高度赞赏,谢谢!
答案 0 :(得分:4)
尝试
lapply(split(d1, cumsum(grepl(names(d1)[1], d1$col1))), function(x) x[!grepl(names(d1)[1], x$col1),])
#$`0`
# col1 col2 col3
#1 G E Q
#2 J R D
#3 N J G
#4 U Y I
#$`1`
# col1 col2 col3
#6 F M A
#7 W R J
#8 Y X U
#9 P I H
#10 N Y K
#11 B T M
#12 E E Y
答案 1 :(得分:4)
这应该是一般的,如果你想分开一条线就像app.post('/cropImg',function(req,res){
// get the temporary location of the file
var tmp_path = req.files.file_browse_cover.path;
gm(tmp_path)
.resize(parseInt(req.body.InputWidth), parseInt(req.body.InputHeight), "!")
.crop(255, 292, parseInt(req.body.InputLeft), parseInt(req.body.InputTop))
.write(__dirname + "/public/images-esct/cropped/"+req.files.file_browse_cover.name , function (err) {
if(err) throw err;
console.log(err);
});
res.setHeader({file_name: req.files.file_browse_cover.name});
//res.end('please stop');
})
那样:
colnames
@DavidArenburg在评论中建议,第二行可以写成更多R风格。
dfSplit<-split(df,cumsum(Reduce("&",Map("==",df,colnames(df)))))
for (i in 2:length(dfSplit)) dfSplit[[i]]<-dfSplit[[i]][-1,]
如果dfSplit[-1] <- lapply(dfSplit[-1], function(x) x[-1, ])
的长度为1(与我原来的第二行相反,会产生错误),它还可以做任何事情。