1

データフレームがあり、値が1に等しいtype b場合、各年のすべての値の平均を取得したい.type a

Year  type   value1   value2  value3  value4  value5
1     a       1        1        2       3       4
1     b       10       12       9       8       10
2     a       1        2        2       2       1
2     b       11       10       13      9       14

私の最終製品は次のようになります。

Year  type_b_values
1      11
2      12.5

これは と の平均でvalue1ありvalue2、とのYear1平均です。ありがとう!value15Year2

4

2 に答える 2

3

これは、基本関数を使用したアプローチです。ここでも plyr または reshape が便利なパッケージになると思いますが、あまり詳しくありません。

dat <- read.table(text="Year  type   value1   value2  value3  value4  value5
1     a       1        1        2       3       4
1     b       10       12       9       8       10
2     a       1        2        2       2       1
2     b       11       10       13      9       14", header=TRUE)


dat_split <- split(dat, dat$Year)       # split our data into a list by year

output <- sapply(dat_split, function(x) {
    y <- x[x$type == "a", -c(1:2)] == 1 # which a in that year = 1
    z <- x[x$type == "b", -c(1:2)][y]   # grab the b values that a = 1
    if (sum(y) == 0) {                  # eliminate if no a = 1
        return(NA)
    }
    mean(z)
})

data.frame(Year = names(output), type_b_values = output)

## > data.frame(Year = names(output), type_b_values = output)
##   Year type_b_values
## 1    1          11.0
## 2    2          12.5
于 2013-05-09T23:17:32.823 に答える