假设我有一个数据框列表。每个数据框都有这样的列:
lists$a
company, x, y ,z
lists$b
company, x, y, z
lists$c
company, x, y, z
任何关于我的意思的想法都会改为:
new.list$company
a,x,y,z
b,x,y,z
c,x,y,z
new.list$company2
a,x,y,z
b,x,y,z
c,x,y,z
我一直在使用:
new.list[[company]] <- ldply(lists, subset, company=company.name)
但这只能一次做一个。有更短的方式吗?
答案 0 :(得分:7)
布兰登,
您可以使用|
中的cast
参数创建列表。使用@Wojciech中的data.frame:
require(reshape)
dat.m <- melt(dat_1, "company")
cast(dat.m, L1 ~ variable | company)
答案 1 :(得分:3)
以下是使用plyr
软件包的方法:从@ wojciech的dat_l
开始,使用ldply
将整个内容放在一个数据框中:
require(plyr)
df <- ldply(dat_l)
然后通过拆分company
列将其重新转换为列表:
new_list <- dlply(df, .(company), subset, select = c(.id,x,y,z) )
> new_list[1:3]
$C
.id x y z
3 a 3 0.7209484 1.6247163
35 i 3 0.1630658 0.2158516
37 j 1 0.8779915 -0.9371671
$G
.id x y z
2 a 2 0.1132311 -1.8067876
10 c 2 0.1825166 1.8355509
28 g 4 0.6474877 -0.8052137
$H
.id x y z
1 a 1 0.9562020 -1.450522
25 g 1 0.1322886 0.584342
答案 2 :(得分:2)
示例数据
dat_l <- lapply(1:10,function(x) data.frame(x=1:4,y=rexp(4),
z=rnorm(4),company=sample(LETTERS,4)))
names(dat_l) <- letters[1:10]
代码
Nrec <- unlist(lapply(dat_l,nrow))
dat <- do.call(rbind,dat_l)
dat$A <- rep(names(Nrec),Nrec)
dat_new <- split(dat[-4],dat$company)