我有数据集:
top100_repository_name month monthly_increase monthly_begin_at monthly_end_with
Bukkit 2012-03 9 431 440
Bukkit 2012-04 19 438 457
Bukkit 2012-05 19 455 474
CodeIgniter 2012-03 15 492 507
CodeIgniter 2012-04 50 506 556
CodeIgniter 2012-05 19 555 574
我使用以下R代码:
library(reshape)
latent.growth.data <- read.csv(file = "LGC_data.csv", header = TRUE)
melt(latent.growth.data, id = c("top100_repository_name", "month"), measured = c("monthly_end_with"))
cast(latent.growth.data, top100_repository_name + month ~ monthly_end_with)
我想用它来创建具有以下结构的数据集:
top100_repository_name 2012-03 2012-04 2012-05
Bukkit 440 457 474
CodeIgniter 507 556 574
但是,当我运行我的代码时,我得到以下输出:
Using monthly_end_with as value column. Use the value argument to cast to override this choice
Error in `[.data.frame`(data, , variables, drop = FALSE) :
undefined columns selected
如何修改代码以便生成所需的输出?
答案 0 :(得分:6)
我确信有人会尽快使用plyr
解决方案,但这是使用reshape
函数的基本解决方案。
test <- read.table(textConnection("top100_repository_name month monthly_increase monthly_begin_at monthly_end_with
Bukkit 2012-03 9 431 440
Bukkit 2012-04 19 438 457
Bukkit 2012-05 19 455 474
CodeIgniter 2012-03 15 492 507
CodeIgniter 2012-04 50 506 556
CodeIgniter 2012-05 19 555 574"),header=TRUE)
重塑此处的数据:
test2 <- reshape(
test[c("top100_repository_name","month","monthly_end_with")],
idvar="top100_repository_name",
timevar="month",
direction="wide"
)
修正名称
names(test2) <- gsub("monthly_end_with.","",names(test2))
看起来像:
> test2
top100_repository_name 2012-03 2012-04 2012-05
1 Bukkit 440 457 474
4 CodeIgniter 507 556 574
答案 1 :(得分:4)
这是基础R中另一种非常直接的方法。使用xtabs()
:
xtabs(monthly_end_with ~ top100_repository_name + month, test)
# month
# top100_repository_name 2012-03 2012-04 2012-05
# Bukkit 440 457 474
# CodeIgniter 507 556 574
as.data.frame.matrix(
xtabs(monthly_end_with ~ top100_repository_name + month, test))
# 2012-03 2012-04 2012-05
# Bukkit 440 457 474
# CodeIgniter 507 556 574
或者,如@thelatemail所示,“reshape2”包中有dcast
,可以按如下方式使用:
dcast(test, top100_repository_name ~ month, value.var="monthly_end_with")
# top100_repository_name 2012-03 2012-04 2012-05
# 1 Bukkit 440 457 474
# 2 CodeIgniter 507 556 574