これは私がRで使用しているデータです:
library(Sleuth2)
ex22.20
「年」列を数値の範囲 (0-7) から 2 つの数値の平均 (3.5) に変換しようとしています。
どんな助けでも大歓迎です。
これは私がRで使用しているデータです:
library(Sleuth2)
ex22.20
「年」列を数値の範囲 (0-7) から 2 つの数値の平均 (3.5) に変換しようとしています。
どんな助けでも大歓迎です。
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
データから特定の行の平均を取得するためのワンライナーを次に示します (最初の行、この場合は 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
平均を計算するために使用します。