私はこれに対する答えを見つけるために本当に一生懸命努力しました、そしてそれが重複であるならば私は謝罪します。
私の質問を説明するために、いくつかのダミーデータを作成します。
tibble(a=c(0.1, 0.2, 0.3), sample1 = c(0, 1, 1), sample2 = c(1, 1, 0))
# A tibble: 3 x 3
a sample1 sample2
<dbl> <dbl> <dbl>
1 0.1 0 1
2 0.2 1 1
3 0.3 1 0
列sample1とsample2の値を条件付きで変更して、それらが1に等しい場合、それらがの値をとるようにする方法。
結果のティブルは次のようになります。
# A tibble: 3 x 3
a sample1 sample2
<dbl> <dbl> <dbl>
1 0.1 0 0.1
2 0.2 0.2 0.2
3 0.3 0.3 0
理想的には、個々のサンプル列ごとにこれを実行したくないので(100を超えるサンプル列があります)、列をループする方法の方が適しています(ループが悪魔であることはわかっていますが)。
ご協力いただきありがとうございます!
あなたは使用することができますmutate_at
とifelse
:
df %>% mutate_at(vars(starts_with('sample')), funs(ifelse(. == 1, a, .)))
# A tibble: 3 x 3
# a sample1 sample2
# <dbl> <dbl> <dbl>
#1 0.1 0.0 0.1
#2 0.2 0.2 0.2
#3 0.3 0.3 0.0
vars(starts_with('sample'))
始まるすべての列と一致するsample
と、mutate_at
関数を適用しfuns(ifelse(. == 1, a, .))
、各列にします。.
ここで一致した列を表します。
あなたがいる場合は必ず、すべてのサンプル列が含まれているだけ1
と0
、それは短縮することができます。
df %>% mutate_at(vars(starts_with('sample')), funs(. * a))
# A tibble: 3 x 3
# a sample1 sample2
# <dbl> <dbl> <dbl>
#1 0.1 0.0 0.1
#2 0.2 0.2 0.2
#3 0.3 0.3 0.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加