矩阵到数据帧的转换

时间:2019-07-24 16:23:46

标签: r dataframe matrix

我有此代码:

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}}。该怎么做?

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