0

これは私がRで使用しているデータです:

library(Sleuth2)
ex22.20

「年」列を数値の範囲 (0-7) から 2 つの数値の平均 (3.5) に変換しようとしています。

どんな助けでも大歓迎です。

4

2 に答える 2

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
于 2012-05-03T01:55:15.997 に答える
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平均を計算するために使用します。
于 2012-05-03T02:08:39.813 に答える