Wal*_*cio 1 r function subset batch-processing
假设我有以下数据框:
x <- data.frame(let = sample(LETTERS, 100, replace = T),
num = sample(1:10, 100, replace = T))
Run Code Online (Sandbox Code Playgroud)
我想创建几个子集,x其中每个新数据帧的级别为x$let.到目前为止,我已经提出了这个简单的功能:
ss <- function(letra){
return(subset(x, let == letra))
}
Run Code Online (Sandbox Code Playgroud)
这是非常简陋的,并没有按照我的意愿进行命名.我的问题是:我如何自动执行以下程序?
a <- ss('A')
b <- ss('B')
c <- ss('C')
...
z <- ss('Z')
Run Code Online (Sandbox Code Playgroud)
详细说明一下.
xs <- split(x, x$let)
Run Code Online (Sandbox Code Playgroud)
现在我们有一个xs原始数据框的每个子集的列表.每个列表组件的名称与选择的因子级别相匹配:
xs[['D']]
let num
8 D 8
14 D 1
16 D 9
54 D 5
60 D 6
64 D 8
74 D 8
Run Code Online (Sandbox Code Playgroud)
大多数人使用xlsx或XLConnect从R编写Excel文件.我碰巧使用XLConnect,但解决方案非常相似.
现在我们可以简单地这样做:
require(XLConnect)
file_name <- paste0("file",LETTERS,".xlsx")
for (i in seq_len(length(xs))){
wb <- loadWorkbook(file_name[i],create = TRUE)
createSheet(wb,"Sheet1")
writeWorksheet(wb,data = xs[[i]],sheet = 1)
saveWorkbook(wb)
}
Run Code Online (Sandbox Code Playgroud)
我已经在一个for循环中完成了这个,因此它更容易阅读和理解,但显然这也可以被推入一个lapply或mapply类型的解决方案.
| 归档时间: |
|
| 查看次数: |
520 次 |
| 最近记录: |