我有此代码:
df<-data.frame(a=c(1,2,2,2,2), b=c(2,2,2,2,1), c=c(3,3,3,3,4), d=c(6,6,6,6,7))
tblFun <- function(x){
tbl <- table(x)
res <- cbind(tbl,round(prop.table(tbl)*100,2))
colnames(res) <- c('Count','Percentage')
res
}
如果我跑过
do.call(rbind,lapply(df,tblFun))
我收到:
Count Percentage
1 1 20
2 4 80
1 1 20
2 4 80
3 4 80
4 1 20
6 4 80
7 1 20
但是如果我跑步:
as.data.frame(do.call(rbind,lapply(df,tblFun)))
我收到:
Count Percentage
X1 1 20
X2 4 80
X1.1 1 20
X2.1 4 80
X3 4 80
X4 1 20
X6 4 80
X7 1 20
我想修改代码,使它与第一列(如控制台中的输出)(而不是我们用View()
看到的矩阵的实际内容)构成数据帧并运行{{ 1}}。该怎么做?
答案 0 :(得分:2)
这是由于重复的行名(使用data.frame
-不允许重复的行名)导致的,因此使用make.unique
进行了修改。根据{{1}}
check.rows-为TRUE,然后检查行的长度和名称是否一致。
?data.frame
如果我们确实需要行名作为索引,请在将out <- do.call(rbind,lapply(df,tblFun))
row.names(out) <- NULL
as.data.frame(out)
# Count Percentage
#1 1 20
#2 4 80
#3 1 20
#4 4 80
#5 4 80
#6 1 20
#7 4 80
#8 1 20
分配给row.names
之前将其创建为列
NULL