2017-12-19 15 views
0

内の他の値に基づいて、交換:は、例えば、私がデータフレームを有し、同じ行の他の値が特定の条件を満たしている場合に特定の値を交換したいとDF

もたらす
DF <- data.frame(a= c(2,4,67), 
       b= c("TSS",".","TSS"), 
       c= c(3,46,5), 
       d= c(45,"-",47)) 

a b c d 
1 2 TSS 3 45 
2 4 . 46 - 
3 67 TSS 5 47 

今、2行目のcとdの値を "。"に置き換えたいと思います。 [2、b]の値が "。"の場合、それぞれ[2、c]となります。結果は次のようになります:

a b c d 
1 2 TSS 3 45 
2 4 . . 46 
3 67 TSS 5 47 

私はforループを使ってみましたが、巨大なデータセットがあるので、時間がかかりすぎます。この問題を解決する良い方法はありますか?

答えて

1

これは動作するはずです:

DF <- data.frame(
    a = c(2, 4, 67), 
    b = c("TSS", ".", "TSS"), 
    c = c(3, 46, 5), 
    d = c(45, "-", 47), 
    stringsAsFactors = FALSE 
) 


DF$d[DF$b == "."] <- DF$c[DF$b == "."] 
DF$c[DF$b == "."] <- "." 

まず、我々はbがある行でD値を置き換えます "" cの値と比較する。 2行目は、cの値を "。"に置き換えます。

> DF 
    a b c d 
1 2 TSS 3 45 
2 4 . . 46 
3 67 TSS 5 47 
+1

これは一般化しません。列数が増えた場合や、 ''。 ''が他の列にある場合はどうなりますか? – Sotos

+0

実際、それは一般化しません。私はOPがこの特定の事例に対する答えを望んでいると思った。私は一般化された解決策は、 "。" "。"の後の列から開始します。それを別の "。"で埋めてください。 – brettljausn

+0

私はあなたのロジックに同意します。一般的なケースを含めるように回答を編集して、より多くのユーザーがこれを享受できるようにしてください。 – Sotos

関連する問題