这是我在R中使用的数据:
library(Sleuth2)
ex22.20
我正在尝试将“年”列从一系列数字(0-7)转换为两个数字之间的平均值(3.5)
非常感谢任何帮助。
答案 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
说明:
levels
提取所需的数据字符串"0-7"
strsplit
将其转换为数字字符串列表[["0" "7"]]
lapply
申请as.numeric
并将其转换为数字列表[[0 7]]
range
生成一个以这些数字作为端点的范围mean
计算平均值。