this questionをdata.table
に変換することに頭を痛めています。 (単純なままにしておくと、同じデータセットを使用します)
V2 == "b
V1 <-> V3
の間の列を交換したい場合。data.tableを使用して2つの列間の値を交換する
dt <- data.table(V1=c(1,2,4), V2=c("a","a","b"), V3=c(2,3,1))
#V1 V2 V3
#1: 1 a 2
#2: 2 a 3
#3: 4 b 1
次のコードは、しかしので、私は私が今data.tableのための解決策を見つけることが決定したよ実現することなくdata.table
を使用していたので、これは私に与えられたフラストレーションの量のdata.frame
のための作業溶液、だろう。私は私の目標スワップリストをループlapply
機能を書いて試してみました
dt <- data.table(V1=c(1,2,4), V2=c("a","a","b"), V3=c(2,3,1))
df <- as.data.frame(dt)
df[df$V2 == "b", c("V1", "V3")] <- df[df$V2 == "b", c("V3", "V1")]
# V1 V2 V3
#1 1 a 2
#2 2 a 3
#3 1 b 4
は、一つの値だけを置き換えるために、問題を絞り込むしようとした列の異なる方法で名前が、すべて成功せずを呼び出そうとしました。
> dt[dt$V2 == "b", c("V1", "V3")] <- dt[dt$V2 == "b", c(V3, V1)]
#Warning messages:
#1: In `[<-.data.table`(`*tmp*`, dt$V2 == "b", c("V1", "V3"), value = c(1, :
# Supplied 2 items to be assigned to 1 items of column 'V1' (1 unused)
#2: In `[<-.data.table`(`*tmp*`, dt$V2 == "b", c("V1", "V3"), value = c(1, :
# Supplied 2 items to be assigned to 1 items of column 'V3' (1 unused)
がどのように我々はdata.table解決策を得ることができます。
これは私が得ることができた最も近いの試みでしたか?
私は.SD'は 'リスト(V1を渡すよりも高速である'使用して推測し、V3 ) '? – BenBarnes
@BenBarnes私はそれが速くなるかどうかテストしませんでした。 'list(V1、V3)'のように見えます。 – akrun
@eddi、あなたは '.SDcols'に対して何を持っていますか?私はそれが事前定義された列のベクトルを持っている場合に、より堅牢なソリューションだと思います。 –