楼主: houw2701
1599 4

[问答] 将一个data.frame的0都转换为中位数 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

高中生

37%

还不是VIP/贵宾

-

威望
0
论坛币
28 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
602 点
帖子
7
精华
0
在线时间
44 小时
注册时间
2017-5-11
最后登录
2020-3-30

楼主
houw2701 发表于 2017-5-31 15:38:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
  1. lapply(data.num, function(x){x[which(x==0)]<-median(x)})
复制代码
data.num是一个data.frame每列是一组数,我想把每组中的0都分别变成每组的中位数。上面的命令只会输出各组的中位数。求大神解答是哪里出了问题。感谢!

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Frame Fram Data RAM FRA function median 中位数 R语言

沙发
gongjiangchao 发表于 2017-5-31 20:22:56
可能是数据框中某些列全都不是0,然后会导致null

藤椅
bbslover 在职认证  发表于 2017-5-31 20:24:00
  1. dat.num <- rbind(c(7, 6, 0),
  2.                  c(3, 2, 1),
  3.                  c(0, 8, 0))
  4. dat.num
  5. dat.num <- as.matrix(dat.num)
  6. medn <- apply(dat.num, 2, median)
  7. medn
  8. wh <- which(dat.num == 0, arr.ind = TRUE)
  9. wh
  10. ## median column
  11. mc <- wh[, "col"]
  12. mc
  13. umc <- unique(mc)
  14. ## median values at the columns having 0
  15. um <- medn[umc]
  16. ## values in the 0 position
  17. pos <- um[match(mc, umc)]

  18. ## copy
  19. dat.num.org <- dat.num
  20. dat.num[wh] <- pos

  21. ## double-check
  22. dat.num.org
  23. dat.num
复制代码

板凳
cheetahfly 在职认证  发表于 2017-5-31 22:35:24
你试一下:
  1. sapply(data.num, function(x){x[which(x == 0)] <- median(x); x})
复制代码
但是要考虑到,如果某一列的中位数刚好也是0,则结果不会有改变。

报纸
gongjiangchao 发表于 2017-6-1 18:25:20
一个比较笨的方法:
for(i in seq_along(dat.num)) {
flag<-dat.num[,i]==0
dat.num[which(flag),i]<-median(dat.num[,i])
}

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 11:04