2

いくつかのデータ フレームdf1, df, 2...., df10 があります。列 (変数) はすべて同じです。

それぞれに新しい変数を作成したいと思います。次のように「手動で」簡単に実行できます。

df1$newvariable <- ifelse(df1$oldvariable == 999, NA, df1$oldvariable)

または、代わりに

df1 = transform(df1, df1$newvariable= ifelse(df1$oldvariable==999, NA, df1$oldvariable)))

残念ながら、ループでこれを行うことはできません。私が書いたら

for (i in names) { #names is the list of dataframes
  i$newvariable <- ifelse(i$oldvariable == 999, NA, i$oldvariable)
}

次の出力が得られます

Error in i$oldvariable : $ operator is invalid for atomic vectors
4

2 に答える 2

3

私がすることは、すべてdata.frameをリストにプールしてから、lapply次のように使用することです。

df1 <- as.data.frame(matrix(runif(2*10), ncol=2))
df2 <- as.data.frame(matrix(runif(2*10), ncol=2))
df3 <- as.data.frame(matrix(runif(2*10), ncol=2))
df4 <- as.data.frame(matrix(runif(2*10), ncol=2))

# create a list and use lapply
df.list <- list(df1, df2, df3, df4)
out <- lapply(df.list, function(x) {
    x$id <- 1:nrow(x)
    x
})

idこれで、新しい列が追加されたすべてのdata.framesが作成されout、のリストになりdata.framesます。などを使用してx[[1]]、各data.framesにアクセスできます。x[[2]]

于 2013-01-14T10:10:17.793 に答える
1

これは何度も聞かれました。は$<-、その "i" インデックスを最初または 2 番目の引数に変換できません。は[[<-、2 番目の引数については実行できますが、最初の引数については実行できません。使用方法を学習する必要があり、おそらく、「名前」のリスト用とデータフレームの各列用のlapply2 つのネストされたを使用する必要があります。lapply具体的な例がないため、質問は不完全です。3 つのデータフレームのセットを作成し、いくつかの値を「999」に設定して、名前のリストを提供します。

于 2013-01-14T10:27:53.690 に答える