R语言-因子与表格

本文详细介绍了R语言中因子变量的定义、创建方法及其在数据分析中的应用,包括如何利用因子进行数据分组处理及切分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:
  • 因子:factor,离散型的表示类别的变量;在table相关的计算中经常被用到
  • levels:因子变量的所有非重复的元素取值集合称为levels
特点:

函数:
  • factor()
  • as.factor()
  • is.factor()
  • tapply(x, f, g):x为数据(必须为vector类型),f为因子(f的长度必须与x相同,表示数据对应的因子),g为函数
  • split()
  • by() :作用类似于tapply,但是应用的数据不限于vector类型
应用:
  • 因子创建
  1. > x <- c(5,12,13,12)
  2. > xf <- factor(x) #使用默认的levels,即所有非重复元素集合
  3. > xf
  4. [1] 5 12 13 12
  5. Levels: 5 12 13
  6. > class(xf)
  7. [1] "factor"
  8. > str(xf)
  9.  Factor w/ 3 levels "5","12","13": 1 2 3 2
  10. > unclass(xf)
  11. [1] 1 2 3 2
  12. attr(,"levels")
  13. [1] "5" "12" "13"
  14. > levels(xf) #返回因子的levels
  15. [1] "5" "12" "13"
  16. > xff <- factor(x,levels=c(5,12,13,88)) #显示设置levels,可以添加没有对应元素的level
  17. > xff
  18. [1] 5 12 13 12
  19. Levels: 5 12 13 88
  20. > x
  21. [1] 5 12 13 12
  22. > xff <- factor(x,levels=c(5,12,11,88)) #当因子中的元素没有对应level时,该元素会被标识为<NA>,即缺失
  23. > xff
  24. [1] 5 12 <NA> 12
  25. Levels: 5 12 11 88
  26. > xff[2] <- 88 #因子的元素可以通过索引值访问
  27. > xff
  28. [1] 5 88 13 12
  29. Levels: 5 12 13 88
  30. > xff[5] <- 28 #不能添加不属于levels的元素
  31. Warning message:
  32. In `[<-.factor`(`*tmp*`, 5, value = 28) :
  33.   invalid factor level, NA generated
  • 因子上应用函数:
  1. > ages <- c(25,26,55,37,21,42)
  2. > affils <- c("R","D","D","R","U","D")
  3. > tapply(ages,affils,mean) #使用tapply在因子上应用函数
  4.  D R U
  5. 41 31 21 
  6. > d <- data.frame(list(gender=c("M","M","F","M","F","F"), age=c(47,59,21,32,33,24),income=c(55000,88000,32450,76500,123000,45650)))
  7. > d$over25 <- ifelse(d$age > 25,1,0)
  8. > tapply(d$income,list(d$gender,d$over25),mean) #使用联合因子,可以使用任意多联合因子,相当于类型组合
  9.       0 1
  10. F 39050 123000.00
  11. M NA 73166.67
  • 根据因子分类应用复杂函数
  1. > by(mtcars, mtcars$gear, function(m) lm(m[,1]~m[,2])) #在数据框上应用复杂函数(多余一个输入参数)
  2. mtcars$gear: 3
  3. Call:
  4. lm(formula = m[, 1] ~ m[, 2])
  5. Coefficients:
  6. (Intercept) m[, 2]
  7.      29.784 -1.832
  8. ------------------------------------------------------------
  9. mtcars$gear: 4
  10. Call:
  11. lm(formula = m[, 1] ~ m[, 2])
  12. Coefficients:
  13. (Intercept) m[, 2]
  14.      41.275 -3.588
  15. ------------------------------------------------------------
  16. mtcars$gear: 5
  17. Call:
  18. lm(formula = m[, 1] ~ m[, 2])
  19. Coefficients:
  20. (Intercept) m[, 2]
  21.       40.58 -3.20 
  • 根据因子切分数据
  1. > split(d$income,list(d$gender,d$over25)) #使用联合因子切分数据,与tapply的区别在于不在数据上应用函数
  2. $F.0
  3. [1] 32450 45650
  4. $M.0
  5. numeric(0)
  6. $F.1
  7. [1] 123000
  8. $M.1
  9. [1] 55000 88000 76500
  10. > class(split(d$income,list(d$gender,d$over25))) #split的返回值为列表
  11. [1] "list"
  • others
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值