需要帮助将R的数字范围(例如:0-7)转换为平均值(例如:3.5)

时间:2012-05-03 01:25:04

标签: r

这是我在R中使用的数据:

library(Sleuth2)
ex22.20

我正在尝试将“年”列从一系列数字(0-7)转换为两个数字之间的平均值(3.5)

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:7)

这是一个解决方案,在应用之前,在ex22.20$Years的级别上计算均值。

library(Sleuth2)
head(ex22.20)
#   Exposure Years Deaths Risk
# 1        0   0-7     10  262
# 2        0  8-11     12  243
# 3        0 12-15     19  240
# 4        0 16-19     31  237
# 5        0 20-23     35  233
# 6        0 24-27     48  227

levels(ex22.20$Years)
# [1] "0-7"   "8-11"  "12-15" "16-19" "20-23" "24-27" "28-31"

mid.values <- sapply(strsplit(levels(ex22.20$Years), "-"),
                     function(x)mean(as.numeric(x)))
mid.values
# [1]  3.5  9.5 13.5 17.5 21.5 25.5 29.5

ex22.20$Years <- mid.values[ex22.20$Years]

head(ex22.20)
#   Exposure Years Deaths Risk
# 1        0   3.5     10  262
# 2        0   9.5     12  243
# 3        0  13.5     19  240
# 4        0  17.5     31  237
# 5        0  21.5     35  233
# 6        0  25.5     48  227

答案 1 :(得分:3)

这是一个单行程序,用于从数据中获取特定行的平均值(第一个,在本例中为0-7):

mean(range(lapply(strsplit(levels(ex22.20$Years)[1],"-"),as.numeric)))

返回

[1] 3.5

说明:

  1. 使用levels提取所需的数据字符串"0-7"
  2. 使用strsplit将其转换为数字字符串列表[["0" "7"]]
  3. 使用lapply申请as.numeric并将其转换为数字列表[[0 7]]
  4. 使用range生成一个以这些数字作为端点的范围
  5. 使用mean计算平均值。