私はこのサイトで多くの条件付き突然変異質問をしましたが、私の問題はそれらよりも複雑です。ここに私のデータ構造です:複雑な条件付き突然変異
d = matrix(data = NA, ncol = 3, nrow = 9)
d = as.data.frame(d)
colnames(d) = c('group', 'type', 'v1')
d$group = c(1,1,1,2,2,2,2,2,2)
d$type = c(1,2,3,1,2,3,3,3,3)
d$v1 = c(43,21,234,5,56,6,56,4,345)
group type v1
1 1 43
1 2 21
1 3 234
2 1 5
2 2 56
2 3 6
2 3 56
2 3 4
2 3 345
この2グループ化変数があります:group
とtype
を。ように私は、新しい変数v2
を作成する必要があります。各グループの
、もし
type == 1
、v2 = 1
各グループには、
type == 2
場合、v2 = [v1(type2) - v1(type1)]/[v1(type2) + v1(type1)]
。例えば、グループ1にtype == 2
、各群におけるv2 = (21-43)/(21 + 43)
、
type == 3
場合、同じ機能v2 = [v1(type3) - v1(type1)]/[v1(type3) + v1(type1)]
を適用します。例えば、グループ1、type == 3
で、v2 = (234 - 43)/(234 + 43)
私のデータセットは、200個の以上のグループがあります。各グループでは、タイプ3の頻度も異なります。ここで
は私がやったことだ: 私は式の機能作成:
flsm = function(x, y){(x - y)/(x + y)}
をそして、私はv2
を計算してみてください。
d %>% group_by(group) %>%
mutate(v2 = ifelse(type == 2,
flsm(v1, type == 1[v1])),
ifelse(type == 3, flsm(v1, type == 1[v1])), 1)
これは、次の警告が返されました:
Error: argument "no" is missing, with no default
In addition: Warning messages:
1: In is.na(e1) | is.na(e2) :
longer object length is not a multiple of shorter object length
2: In `==.default`(c(1L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), 1[c(6.27, :longer object length is not a multiple of shorter object length
私は正しいアプローチからやっていないような気がします。 。 v2
の計算方法は?
'flsm'を呼び出すたびに余分な括弧があるようです。 ifelse(type == 3、flsm(v1、type == 1 [v1])、1(v1、type == 1 [v1])、 ifelse ) '。私はそれが唯一の問題かどうかは分かりませんが、あなたのコードが修正されているかどうかを確認してください。 – eipi10