Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何从长到宽重塑和总结分类数据?_R_Database_Reshape_Categorical Data - Fatal编程技术网

R 如何从长到宽重塑和总结分类数据?

R 如何从长到宽重塑和总结分类数据?,r,database,reshape,categorical-data,R,Database,Reshape,Categorical Data,我的数据库是这样的: db <- data.frame(var1 = c("A", "B", "C", "D", "E"), var2 = c("X", "X", "Y", "Y", "Y"), var3 = c("G", "H", "G", "G", "K")) db var1 var2 var3 A X G B X H C Y G D Y G E Y K 我

我的数据库是这样的:

db <- data.frame(var1 = c("A", "B", "C", "D", "E"), var2 = c("X", "X", "Y", "Y", "Y"),
           var3 = c("G", "H", "G", "G", "K"))
db

  var1 var2 var3
    A    X    G
    B    X    H
    C    Y    G
    D    Y    G
    E    Y    K

我尝试了石膏和重塑功能,但没有成功。

xtabs功能使用起来相当简单。唯一的认知跳跃是认识到没有LHS,除非你想对第三个变量求和:

tbl <- data.frame( var2 = db[,2], var3 = paste("var3", db[,3], sep = "."))
table(tbl)
    var3
var2 var3.G var3.H var3.K
   X      1      1      0
   Y      2      0      1
> xtabs( ~var2+var3, data=db)
    var3
var2 G H K
   X 1 1 0
   Y 2 0 1

您不想在上面使用as.data.frame,因为它将转换为长格式,但您可以在上面使用as.data.frame.matrix,因为R-“table”继承自“matrix”类。

还有一个选项。使用超级有用的软件包:


下面是另一种方法:

您可以使用t和table的组合

db <- data.frame(var1 = c("A", "B", "C", "D", "E"), 
                 var2 = c("X", "X", "Y", "Y", "Y"),
                 var3 = c("G", "H", "G", "G", "K"))
db

t(table(db$var3,db$var2))

非常聪明的解决方案!我只想补充一句:tbl是的。。。第一个立柱成为更优雅的解决方案!我会等一段时间再核对。我不需要核对,学生们有了更完整的答案。
library(data.table)

db <- data.table(var1 = c("A", "B", "C", "D", "E"), var2 = c("X", "X", "Y", "Y", "Y"),
           var3 = c("G", "H", "G", "G", "K"))

dcast.data.table(db, var2 ~ var3, fun = length, value.var= 'var3')
   var2 G H K
1:    X 1 1 0
2:    Y 2 0 1
db <- data.frame(var1 = c("A", "B", "C", "D", "E"), 
                 var2 = c("X", "X", "Y", "Y", "Y"),
                 var3 = c("G", "H", "G", "G", "K"))
db

t(table(db$var3,db$var2))