网站首页 > 技术文章 正文
提出问题
首先,假设我有一个这样的数据集(暂且命名为t1):
现在我想做的是对于每一行,找出非NA的值,填充到“mean.scale”这个新的变量;如果有多个非NA,那么就计算其平均值。也就是说,我希望最终得到如下数据集:
原问题大家可以访问以下链接:http://stackoverflow.com/questions/23521323/r-data-table-for-computing-summary-stats-across-multiple-columns
解题思路
在解决本问题的过程中我们需要用到data.table包!
Stackoverflow上有人提出了这个问题,大神eddi提出了解决方案:
"It'll be easiest to rearrange you data a little..."
解题步骤
如何rearrange呢?eddi大神的意思是,原来inti_total_asset和issuing_scale是两个变量,现在要把他们stack起来,“堆成”一列,也就是这样:
相应的代码是(t1是原始数据集):
? t2 <- t1[, list(mean.scale = c(init_total_asset, issuing_scale)), by = .(fund_name)]
其中的关键在于拼接函数c(),它将不同列的向量拼接成了一列。另外,这个操作是不是有点熟悉?对,这个步骤和cast和melt函数的作用类似,只不过这里直接用了data.table自己的语句。事实上,data.table也整合了reshape中的cast和melt函数,并且将cast函数升级为dcast,感兴趣的小伙伴可以去研究一番。
在拉直数据后,接下来要做的工作就很简单了。我们只要把数据按照fund_name分组,然后对每组求scale的均值。唯一需要注意的有两点。首先,别忘了mean中的na.rm = T参数,它能够让函数忽略缺失值。其次,最后计算出的结果中会有NaN(not a number)值,产生这种情况是因为在计算均值中出现了0作为除数的情况,对此我们需要用!is.finite()将其排除。代码如下:
?t3<-t2[,.(mean.scale=mean(mean.scale,na.rm=T)),by=fund_name][is.finite(mean.scale)]
[is.finite(mean.scale)]
结果是这个样子的:
看,胜利就在前方,最后,我们只要把mean.scale合并到原来的数据集就行,代码如下(t1是原始数据集):
? t4 <- t3[t1, on = "fund_name", nomatch = 0]
结果如下:
事实上,大猫把整个过程分解成了好几步,如果对于data.table包比较熟悉,完全可以在一行之内搞定所有事情,根本不需要把进行数据集的拆分、合并:
?t.final<-t1[,":="(mean.scale=mean(c(init_total_asset,issuing_scale),na.rm=T)),by=.(fund_name)]
[is.finite(mean.scale)]
提示:把所有步骤打包成一步的关键在于“:=”符号的运用。
本期总结
本期大猫带领大家学习了如何在R中按照行进行处理。R的数据处理哲学是向量,是列,但这并不妨碍我们按照行进行处理,其中的关键,就在于运用 c() 函数把不同的向量拼接成一个向量。
End.
来源:大猫的R语言课堂
- 上一篇: Rust 向量(Vec) rust {:?}
- 下一篇: 外卖套餐搭配的探索和应用 外卖套餐搭配技巧
猜你喜欢
- 2024-10-18 「NLP」BERT fintune 的艺术 女性人文艺术欣赏ppt
- 2024-10-18 大模型开发 - 一文搞懂Transformer工作原理
- 2024-10-18 向量的玩法规则,一起来啊! 向量入门
- 2024-10-18 MutualNet:一种“宽度-输入分辨率”互相学习的网络轻量化方法
- 2024-10-18 Python Numpy库详细教程 numpy python2.7
- 2024-10-18 Numpy数组的索引与切片和变形拼接分裂
- 2024-10-18 端到端声源分离研究:现状、进展和未来
- 2024-10-18 别人家的高中生:入大学前,Ta详细梳理了GAN的发展脉络
- 2024-10-18 CIKM最佳论文:11亿节点的大型图,看闲鱼用图卷积过滤垃圾评论
- 2024-10-18 南方测绘推荐 | 武汉大学钟青岑:顾及路网约束的深度地图匹配方法
你 发表评论:
欢迎- 11-19零基础学习!数据分析分类模型「支持向量机」
- 11-19机器学习 | 算法笔记(三)- 支持向量机算法以及代码实现
- 11-19我以前一直没有真正理解支持向量机,直到我画了一张图
- 11-19研一小姑娘分享机器学习之SVM支持向量机
- 11-19[机器学习] sklearn支持向量机
- 11-19支持向量机
- 11-19初探支持向量机:用大白话解释、原理详解、Python实现
- 11-19支持向量机的核函数
- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)