【问题标题】:Conversion of matrix to data frame矩阵到数据框的转换
【发布时间】:2019-07-24 16:23:46
【问题描述】:

我有这个代码:

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()! 中看到的矩阵的实际内容)运行 do.call(rbind,lapply(df,tblFun))。如何做到这一点?

【问题讨论】:

  • 转换成tibbleas_tibble(do.call(rbind, lapply(df, tblFun)))

标签: r dataframe matrix


【解决方案1】:

这是由于重复的行名(data.frame - 不允许重复的行名),它被 make.unique 修改。根据?data.frame

check.rows- TRUE 然后检查行的长度和名称的一致性。

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

out <- do.call(rbind,lapply(df,tblFun))
out <- cbind(index = as.numeric(row.names(out)), out)
row.names(out) <- NULL
as.data.frame(out)
#. index Count Percentage
31     1     1         20
#2     2     4         80
#3     1     1         20
#4     2     4         80
#5     3     4         80
#6     4     1         20
#7     6     4         80
#8     7     1         20

【讨论】:

  • 您的代码从矩阵中删除了控制台输出的信息(它不显示行的索引,但显示被测试的变量值)。
  • @vasili111。您可能需要创建一列索引,否则不允许重复的行名
  • 还有rbind.data.frame。在第一个代码示例中,它将保存一个代码行:do.call(rbind.data.frame, lapply(df, tblFun))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多