-1

一連のデータフレームを作成し、それらのデータフレーム内の変数をループで変更しようとしています。以下のコードは、フォームのオブジェクト全体を作成することを除いて、ほとんど機能します..... が欲しいのは、いつものように $ 要素で囲まれた 5 つのデータフレームです。df_1$x_csdf_1$yx_cs

nl<-seq(1,5)
for (i in nl) {
  assign(paste0("df_",nl[i]),data.frame(x=seq(1:10),y=rnorm(10)))
}
ls()[grep("df_",ls())]
nls<-ls()[grep("df_",ls())]
for (df in nls) {
  print(df)
  for (var in names(get(df))) {
    print(var)
    assign(paste0(df,"$",paste0(var,"_cs")),cumsum(get(df)[[var]]))
  }
}
ls()[grep("df_",ls())]

ありがとう!

4

3 に答える 3

1

listグローバル環境での名前ではなく、これを行うために a を使用するようにコードを変換する方法を次に示します。

lst <- list()
for (i in seq(1,5)) {
  lst[[i]] <- data.frame(x=seq(1:10),y=rnorm(10))
}
lst <- lapply(lst, function(temp) {
  for (var in names(temp)) {
    temp[[paste0(var,"_cs")]]<-cumsum(temp[[var]])
  }
  return(temp)
})

summary(lst[[1]])
##        x               y                x_cs         y_cs       
##  Min.   : 1.00   Min.   :-2.7610   Min.   : 1   Min.   :-5.004  
##  1st Qu.: 3.25   1st Qu.:-1.4388   1st Qu.: 7   1st Qu.:-2.652  
##  Median : 5.50   Median :-0.7308   Median :18   Median :-1.656  
##  Mean   : 5.50   Mean   :-0.4338   Mean   :22   Mean   :-1.908  
##  3rd Qu.: 7.75   3rd Qu.: 0.7028   3rd Qu.:34   3rd Qu.:-1.207  
于 2013-04-27T23:25:00.230 に答える
-1

これを解決してくれた R-Help リストの Blaser Nello に感謝します。答えを共有するのが最善だと思いました。

これを行うには、次の 2 つの方法があります。

これにより、コードが少し簡素化されます。ただし、x_cs の名前を cs.x に変更します。

for (df in nls) {
  assign(df, cbind(get(df), cs=apply(get(df), 2, cumsum)))
  }

これはあなたがしたことに近いです。

for (df in nls) {
  print(df)
  for (var in names(get(df))) {
    print(var)
    assign(df, within(get(df), assign(paste0(var,"_cs"),
cumsum(get(df)[[var]]))))
  }}
ls()[grep("df_",ls())]
于 2013-04-26T13:18:32.540 に答える