Identify duplicates of one value with different values in another column;私は解決策が近いと感じましたが、dplyr mutate
関数は、max(ID)
を以下のコードで使用し、変更後の値(再帰的に)ではなく、事前に突然変異した状態のmax
を参照するため機能できませんでした。dplyrで現在変異している変数の最大値を調べる
目的は、現在のアドレスが同じID値の前のアドレスと一致しない行に新しい一意のID値を割り当てることです。
私が試しコード:
# A tibble: 13 x 2
ID Address
<dbl> <chr>
1 1 X
2 1 X
3 6 Y
4 2 Z
5 2 Z
6 3 A
7 6 B
8 4 C
9 6 D
10 6 E
11 5 F
12 5 F
13 5 F
予想される出力:
ID Address
1 X
1 X
6 Y
2 Z
2 Z
3 A
7 B
4 C
8 D
9 E
5 F
5 F
5 F
任意の助けをいただければ幸いです
df <- read.table(text = 'ID Address
1 X
1 X
1 Y
2 Z
2 Z
3 A
3 B
4 C
4 D
4 E
5 F
5 F
5 F
', header= T, stringsAsFactors = F)
df %>% group_by(ID) %>% mutate(flag = ifelse(lag(Address)==Address,F,T)) %>%
mutate(flag = ifelse(is.na(flag),F,flag)) %>% ungroup() %>%
mutate(newID = ifelse(flag | is.na(flag), max(ID)+1,ID))%>%
select(ID = newID,Address)
は出力を受け取りました!
編集:
理想コード:私が使用する現在の変異可変であるnewID
を使用することができましたはずです。
> df %>% group_by(ID) %>% mutate(flag = ifelse(lag(Address)==Address,F,T)) %>%
+ mutate(flag = ifelse(is.na(flag),F,flag)) %>% ungroup() %>%
+ mutate(newID = ifelse(flag | is.na(flag), max(newID)+1,ID))%>%
+ select(ID = newID,Address)
に置き換えることができ
max(ID) + seq_len(sum(flag))
でmax(ID) + 1
を交換し、代わりにifelse
あなたの問題を理解して、あなたの予想される出力は@akrunと私がリンク先であなたに与えたものです –私はそれが理想的であったはずの方法でコードを更新しました。助けてくれますか? – amrrs
あなたの投稿を理解することはできませんが、@akrunは明らかに私を必要としない可能性があります;)。 –