首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于转置创建多个csv文件

基于转置创建多个csv文件
EN

Stack Overflow用户
提问于 2013-10-03 09:23:39
回答 2查看 305关注 0票数 0

我有一个数据文件,如下所示:

代码语言:javascript
复制
CustID  item    sales
1       a1      40
1       a2      40
1       a3      34
1       a4      42
1       a5      21
1       a6      22
2       a1      33
2       a2      30
2       a3      21
2       a4      11
2       a5      19
2       a6      20

我需要创建2个转置数据集(它们应该是CSV),这样每个数据集都包含每组3项.

产出:

代码语言:javascript
复制
csv1 (item 1-3)         
CustID  itema1  itema2  itema3
1         40      40     34
2         33      30     21

csv2 (item 4-6)         
CustID  itema4  itema5  itema6
1         42     21      22
2         11     19      20

请帮帮我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-03 09:32:56

不是一刀切的解决方案,但它能做你想做的。

首先,使用splitdcast的组合,您可以创建和转置df。

代码语言:javascript
复制
> items <- split(df, df$item)
> 
> library(reshape2)
> dcast(do.call(rbind, items[1:3]), CustID~item )
  CustID a1 a2 a3
1      1 40 40 34
2      2 33 30 21

> dcast(do.call(rbind, items[4:6]), CustID~item )
  CustID a4 a5 a6
1      1 42 21 22
2      2 11 19 20

然后使用write.csv,您可以创建data.frames并将其保存到csv文件中。

以下是一张照片:

代码语言:javascript
复制
lapply(seq(1, length(items), 3), function(i){
  DF <- dcast(do.call(rbind, items[i:(i+2)]), CustID~item )
  write.csv(DF, file = paste0("DF", i, ".csv"))
})
票数 2
EN

Stack Overflow用户

发布于 2013-10-03 09:46:17

下面是另一种方法,使用基本R中的xtabs

代码语言:javascript
复制
x <- xtabs(sales ~ CustID + item, mydf)
x
#       item
# CustID a1 a2 a3 a4 a5 a6
#      1 40 40 34 42 21 22
#      2 33 30 21 11 19 20

^^该第一步为您转换数据。

代码语言:javascript
复制
fileout <- list(A = 1:3, B = 4:6)

在这里,我们已经为每个CSV创建了要导出的列的命名列表。列表项的名称将用于CSV文件名。

下面是如何使用lapply编写CSV文件的示例。

代码语言:javascript
复制
lapply(seq_along(fileout), function(y) 
  write.csv(x[, fileout[[y]]], 
            file = paste(names(fileout[y]), ".csv", sep = "")))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19155457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档