我只想将表恢复到原始结构。但是,它有一个错误,我不知道如何调试它。
rm(list=ls())
Mytable<-function(mytable){
rows<-dim(mytable)[1]
cols<-dim(mytable)[2]
datatable<-NULL
for(i in 1:rows){
for(j in 1:mytable$N[i])
{
rowdata=mytable[i,c(1:2)]
datatable=cbind(datatable,rowdata)
}
}
row.names(datatable)<-c(1:dim(datatable)[1])
return(datatable)
}
sex<-rep(c('M','F'),each=4)
grade<-rep(c('B','C','D','E'),2)
number<-c(2,11,12,5,2,13,10,3)
table<-data.frame(S=sex,G=grade,N=number,stringsAsFactors=F)
mydata<-Mytable(table)
答案 0 :(得分:0)
我不确定你在使用你的函数做什么(更具描述性的名称会有所帮助),但我想你应该使用rbind而不是cbind,因为它似乎是绑定行而不是列。< / p>
答案 1 :(得分:0)
我现在通过滥用cbind来判断我错在哪里。正确的代码如下。
rm(list=ls())
Mytable<-function(mytable){
rows<-dim(mytable)[1]
cols<-dim(mytable)[2]
datatable<-NULL
for(i in 1:rows){
for(j in 1:mytable$N[i])
{
rowdata=mytable[i,c(1:2)]
datatable=cbind(datatable,rowdata)
}
}
row.names(datatable)<-c(1:dim(datatable)[1])
return(datatable)
}
sex<-rep(c('M','F'),each=4)
grade<-rep(c('B','C','D','E'),2)
number<-c(2,11,12,5,2,13,10,3)
table<-data.frame(S=sex,G=grade,N=number,stringsAsFactors=F)
mydata<-Mytable(table)
答案 2 :(得分:0)
使用tidyr::complete
和dplyr
可以实现一个解决方案,重复列N
中提到的行数。解决方案如下:
library(dplyr)
library(tidyr)
table %>% group_by(S,G) %>%
complete(S,G,N = seq(N)) %>%
as.data.frame()
# S G N
# 1 F B 1
# 2 F B 2
# 3 F C 1
# 4 F C 2
# 5 F C 3
# 6 F C 4
# 7 F C 5
# 8 F C 6
# 9 F C 7
#
#.....49 more rows
数据
sex<-rep(c('M','F'),each=4)
grade<-rep(c('B','C','D','E'),2)
number<-c(2,11,12,5,2,13,10,3)
table<-data.frame(S=sex,G=grade,N=number,stringsAsFactors=F)