1

データの L1、L2、L3 の 3 つの列と、L1+L2、L2+L3、L3+L1、L1-L2 などの列操作の組み合わせというラベルの付いた空の列を持つデータフレームがあります。列名を確認し、その新しい列にデータを入力するために必要な操作を実行する方法はありますか?

私は考えています:-一致を使用して適切な元の列を見つけ、for ループを使用してこの検索のすべての列を反復処理しますか? したがって、入力しようとしている列がL1 + L2の場合、次のようなものになります: apply(dataframe[,c(i, j), 1, sum)

4

2 に答える 2

2
dfrm <- data.frame( L1=1:3, L2=1:3, L3=3+1,  `L1+L2`=NA, 
                   `L2+L3`=NA, `L3+L1`=NA, `L1-L2`=NA, 
                    check.names=FALSE)
dfrm
#------------
  L1 L2 L3 L1+L2 L2+L3 L3+L1 L1-L2
1  1  1  4    NA    NA    NA    NA
2  2  2  4    NA    NA    NA    NA
3  3  3  4    NA    NA    NA    NA
#-------------
 dfrm[, 4:7] <- lapply(names(dfrm[, 4:7]), 
                       function(nam) eval(parse(text=nam), envir=dfrm) )
 dfrm
#-----------
  L1 L2 L3 L1+L2 L2+L3 L3+L1 L1-L2
1  1  1  4     2     5     5     0
2  2  2  4     4     6     6     0
3  3  3  4     6     7     7     0

の使用はヘルプページで特に警告されているため、私はeval(parse(text=...))ではなくを使用することにしました。ただし、フォームがより安全であるべき理由を説明できるかどうかはわかりません。withwitheval(..., target_dfrm)

于 2013-08-13T18:32:31.717 に答える