0

簡単なはずですが、できません。私はたくさんのファイルを持っており、各ファイルは種名で名前が付けられています。また、各列に種名が付けられたデータフレームもあります。データフレームから列を抽出し、列名を変更して「Common」と言った後、その列をそれぞれの種ファイルと結合して、後でcoludですべての種を比較できるようにします。

Df:

ID  Tilia_americana Fraxinus_americana  Ulmus_americana
1   23  32  32
2   21  34  35
3   20  33  32
4   19  33  36
5   23  23  34
6   22  34  37

申し訳ありませんが、以前は具体的ではありませんでした。ご覧のとおり、列名は種名です。さらに、種名を含む3つの個別のファイルがあります。最初のファイルのヘッダーは次のようになります。

Tilia_americana:

ID  Wie Rei Wee
1   2   4   3
2   4   3   4
3   3   2   5
4   5   5   2
5   6   3   4
6   7   4   3

DFからTilia_americanの列を抽出し、列名を「Common」に変更してTilia_americanファイルと組み合わせると、出力は次のようになります。

ID  Wie Rei Wee Common
1   2   4   3   23
2   4   3   4   21
3   3   2   5   20
4   5   5   2   19
5   6   3   4   23
6   7   4   3   22

最後に、各ファイルを個別に保存したい...ありがとう

4

2 に答える 2

4

詳細(data.frameのファイル名と列名が完全に一致するかどうかなど)がわからないと、具体的なアドバイスを提供するのは困難ですが、おそらくそれに沿ったものです。

importMyData <- function(x, my.df) {
    data.from.file <- read.table(x, header = TRUE) # set your import function and its params
    sp.name <- unlist(strsplit(x, ".txt"))
    out <- cbind(data.from.file, my.df[, sp.name])
    out
}

この関数は内で使用できますsapply

my.file <- list.files(pattern = ".txt")
sapply(my.file, FUN = importMyData, my.df = my.df)
于 2012-12-19T11:42:29.490 に答える
1

あなたは次のようなもので種ファイルのリストを得ることができます

files <- list.files( pattern = ".txt" )

.txtこれらのテキストファイルに拡張子があり、そのフォルダに他のテキストファイルがないと仮定します。

species <- gsub( ".txt", "", files )

拡張子を削除すると、Commondata.frameに列名が含まれます。

これで、ループを作成できます(lapplyなどのより良い方法があるかもしれません...):

for( i in 1:length( files ) )
{
    x <- read.table( files[i], header = TRUE )
    x <- cbind( x, Common[ colnames( Common ) == species[i] ] )
    write.table( x, files[i], row.names = FALSE )
}

これで始められることを願っています!

于 2012-12-19T11:36:49.550 に答える