楼主: shicuicheng
8651 2

[问答] as.numeric()函数失效? [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

已卖:4份资源

大专生

80%

还不是VIP/贵宾

-

威望
0
论坛币
3167 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
401 点
帖子
32
精华
0
在线时间
86 小时
注册时间
2015-6-14
最后登录
2024-12-18

楼主
shicuicheng 发表于 2017-2-16 14:26:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. > datax
  2.            V1         V2  V3 V4 V5
  3. 1        John      Davis 502 95 25
  4. 2      Angela   Williams 600 99 22
  5. 3  Bullwinkle      Moose 412 80 18
  6. 4       David      Jones 358 82 15
  7. 5      Janice Markhammer 495 75 20
  8. 6      Cheryl    Cushing 512 85 28
  9. 7      Reuven    Ytzrhak 410 80 15
  10. 8        Greg       Knox 625 95 30
  11. 9        Joel    England 573 89 27
  12. 10       Mary    Rayburn 522 86 18
  13. > apply(datax,2,mean)
  14. V1 V2 V3 V4 V5
  15. NA NA NA NA NA
  16. Warning messages:
  17. 1: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  18. 2: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  19. 3: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  20. 4: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  21. 5: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  22. > #只能单独每列求
  23. > mean(datax$V3)
  24. [1] 500.9
  25. > #合并dataframe中的某
  26. > library(tidyr)
  27. > datax <- unite(datax, "姓名", V1, V2, sep = " ")
  28. > datax
  29.                 姓名  V3 V4 V5
  30. 1         John Davis 502 95 25
  31. 2    Angela Williams 600 99 22
  32. 3   Bullwinkle Moose 412 80 18
  33. 4        David Jones 358 82 15
  34. 5  Janice Markhammer 495 75 20
  35. 6     Cheryl Cushing 512 85 28
  36. 7     Reuven Ytzrhak 410 80 15
  37. 8          Greg Knox 625 95 30
  38. 9       Joel England 573 89 27
  39. 10      Mary Rayburn 522 86 18
  40. > #将Dataframe中的某列由字符型转为数字
  41. > datay <- data.frame(datax$姓名,
  42. +                     as.numeric(datax$V3),
  43. +                     as.numeric(datax$V4),
  44. +                     as.numeric(datax$V5),
  45. +                     stringsAsFactors = FALSE)
  46. > #修改列名称
  47. > colnames(datay) = c("姓名","数学","科学","英语")
  48. > datay
  49.                 姓名 数学 科学 英语
  50. 1         John Davis  502   95   25
  51. 2    Angela Williams  600   99   22
  52. 3   Bullwinkle Moose  412   80   18
  53. 4        David Jones  358   82   15
  54. 5  Janice Markhammer  495   75   20
  55. 6     Cheryl Cushing  512   85   28
  56. 7     Reuven Ytzrhak  410   80   15
  57. 8          Greg Knox  625   95   30
  58. 9       Joel England  573   89   27
  59. 10      Mary Rayburn  522   86   18
  60. > apply(datay,2,mean)
  61. 姓名 数学 科学 英语
  62.   NA   NA   NA   NA
  63. Warning messages:
  64. 1: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  65. 2: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  66. 3: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  67. 4: In mean.default(newX[, i], ...) : 参数不是数值也不是逻辑值:回覆NA
  68. >
复制代码
很奇怪为什么dataframe里面的数据可以单独求平均值,但是用apply函数就不能一起求了,并且用了as.numeric()之后也不能求,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:numeric Eric NUM Dataframe Williams Angela

沙发
shicuicheng 发表于 2017-2-17 08:14:38
顶一个啊

藤椅
jiangbeilu 学生认证  发表于 2017-2-18 21:24:27
这个,涉及到一个变量强制转换问题。
首先,我们要知道apply操作的对象是一个matrix,而matrix有一个很重要的特点,所有元素都是同一种数据类型。要么全是character,要么全是numeric或者其它一种类型。
楼主,你的问题在于,使用apply时,虽然你设定了2为列,但在这个操作过程中,R强制使用了as.matrix对这个data frame进行了转换。转换的结果就是所有的元素都变成了character,因为如果有numeric类型和character,会被统一转换成character,不信你可以用apply试一下:
  1. apply(datax,2,class)
复制代码

所以正确使用apply的做法应该是:
  1. apply(datax[,-(1:2)],2,mean)
复制代码

不知道这样说,是否清楚了哈

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

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