0

私はdata.frameそうのようなものを持っています

df1<- read.table(text="  X1 X2 X3 X4 X5
            0  0 -1 0 0
            -1 0  0  -1  0
            0  0  0  0  0", header=TRUE)

そして2つのリスト、そのように

list1<- list()
list1[1]<-4
list1[2]<- list(c(2,5))
list1[3]<- 0

list2<- list()
list2[1]<- 3
list2[2]<- list(c(1,4))
list2[3]<- 0

私がやりたいことは、list1 を使用して df1 から列を選択することです。これらは、list2 を使用して選択された列の値に基づいて変更する必要があります。

たとえば、list1 の最初の要素が選択されると、最初の行の 4 番目の列が選択されます。同時に、list2 の最初の要素が選択され、最初の行の 3 列目の値が抽出されます。最終的に、df[1,4] は df[1,3] に置き換えられます。

最終的な data.frame は次のようになります

  X1  X2  X3  X4  X5
1  0   0  -1  -1   0
2 -1  -1   0  -1  -1
3  0   0   0   0   0

私は一日から自分で試してきましたが、SOで同様の質問を読んだ後でも、リストの扱い方がわかりません。

4

2 に答える 2

3

代入しようとしていることを考えると、これは for ループの非常に簡単な使用例のように思えます。

df2 <- df1
for(i in 1:length(list1)){
    if(!list1[[i]]==0 & !list2[[i]]==0) # deal with `0`'s
        df2[i,list1[[i]]] <- df1[i,list2[[i]]]
}
df2

これはあなたにこれを与えるでしょう:

> df2
  X1 X2 X3 X4 X5
1  0  0 -1 -1  0
2 -1 -1  0 -1 -1
3  0  0  0  0  0
于 2013-07-22T10:23:06.027 に答える