r - lapply() 输出为具有多个函数的多个值的数据帧 - R
问题描述
我有这个摘要数据框(来自这个问题):
lst <- lapply(1:ncol(mtcars), function(i){
x <- mtcars[[i]]
data.frame(
Variable_name = colnames(mtcars)[[i]],
sum_unique = NROW(unique(x)),
NA_count = sum(is.na(x)),
NA_percent = round(sum(is.na(x))/NROW(x),2))
})
do.call(rbind, lst)
我想为每一列添加五个最高和最低值:
lst <- lapply(1:ncol(mtcars), function(i){
x <- mtcars[[i]]
data.frame(
variable_name = colnames(mtcars)[[i]],
distinct = NROW(unique(x)),
NA_count = sum(is.na(x)),
NA_percent = round(sum(is.na(x))/NROW(x),2),
first_5 = paste0(sort(x, decreasing=TRUE)[1:5],";"),
last_5 = paste0(sort(x)[1:5],";")
)
})
do.call(rbind, lst)
但它为每个first_5
和last_5
值创建一个新行。为什么会这样?我该如何解决?
解决方案
你快到了。因为你有五个数字一个位置,paste0
它本身不能胜任这项工作。一种解决方案是toString
像这样添加:
lst <- lapply(1:ncol(mtcars), function(i){
x <- mtcars[[i]]
data.frame(
variable_name = colnames(mtcars)[[i]],
distinct = NROW(unique(x)),
NA_count = sum(is.na(x)),
NA_percent = round(sum(is.na(x))/NROW(x),2),
first_5 = paste0(toString(sort(x, decreasing=TRUE)[1:5]),";"),
last_5 = paste0(toString(sort(x)[1:5]),";")
)
})
do.call(rbind, lst)
推荐阅读
- macros - rustc --pretty expand 在解析外部块内的宏扩展时使用了我所有的 RAM
- node.js - NodeJS MSSQL REST 连接关闭错误
- symfony - 在 Symfony 4 页面中找不到路由
- python - 需要从模板中的 django 获取实例 id
- r - 如何在单位正方形上多次进行 100 个点的 Voronoi 镶嵌
- c# - 如何在 .NET Core 的主布局视图中呈现特定控制器的操作?
- javascript - 是否有在样式组件中使用 mixin 的替代解决方案?
- c - 在 libtomcrypt 中比较处理器性能时出现异常结果
- javascript - 通过js获取参数设置隐藏字段的值
- node.js - 平面 JSON 到层次结构 JSON