0

csv 形式のテーブルがあります。データは次のとおりです。

            1           3            1          2
1415_at 1   8.512147859 8.196725061 8.174426394 8.62388149
1411_at 2   9.119200527 9.190318548 9.149239039 9.211401637
1412_at 3   10.03383593 9.575728316 10.06998673 9.735217522
1413_at 4   5.925999419 5.692092375 5.689299161 7.807354922

私がそれを読んだとき:

m <- read.csv("table.csv")

m の値を出力すると、次のように変化することがわかります。

        X   X.1        X1       X3      X1.1       X4
1 1415_at   1       8.512148 8.196725  8.174426 8.623881

1 または 2 のラベルが付いた列のみを保持するように操作を行ったので、次のようにします。

smallerdat <- m[ grep("^X$|^X.1$|^X1$|^X2$|1\\.|2\\." , names(m) ) ]

write.csv(smallerdat,"table2.csv")

これらの迷惑なヘッダーと最初の列が追加されたファイルが書き込まれますが、これは必要ありません。

      X   X.1        X1             X1.1       X2
1 1415_at   1       8.512148   8.174426 8.623881

そのため、Excel でそのデータを開くと、ヘッダーはまだ X、X.1、およびその息子です。必要なのは、ヘッダーが次と同じままであることです。

                     1      1           2
1415_at 1       8.196725061 8.174426394 8.62388149

助けはありますか?

自動的に追加される最初の列は必要ないことにも注意してください。その列を削除するにはどうすればよいですか?

4

2 に答える 2

4

ここには 2 つの問題があります。

  1. CSV ファイルを読み取るには、次を使用します。

    m <- read.csv("table.csv", check.names = FALSE)
    

    ただし、これを行うと、列名を簡単に使用できなくなることに注意してください。代わりにバッククォートでそれらを引用する必要があり、列名が重複しているため、問題が発生する可能性が高くなります。

    m$1
    # Error: unexpected numeric constant in "mydf$1"
    mydf$`1`
    # [1]  8.512148  9.119201 10.033836  5.925999
    
  2. 「m」オブジェクトを CSV ファイルに書き込むには、次を使用します。

    write.csv(m, "table2.csv", row.names = FALSE)
    

手順 1 の方法を使用してファイルを読み込んだ後、次のようにサブセット化できます。最初の列と「3」または「4」という名前の列が必要な場合は、次を使用できます。

m[names(m) %in% c("", "3", "4")]
#                    3        4
# 1 1415_at 1 8.196725 8.623881
# 2 1411_at 2 9.190319 9.211402
# 3 1412_at 3 9.575728 9.735218
# 4 1413_at 4 5.692092 7.807355

更新:使用する前に名前を修正write.csv

何らかの理由でステップ 1 から始めたくない場合でも、問題を解決できます。ステートメントでサブセットを取得することに成功しましたがgrep、それによって列名が変更されることはありません (そうすべきであると期待する理由がわかりません)。gsubまたは他のregexソリューションのいずれかを使用してこれを行う必要があります。

CSV で読み取った方法での列の名前は次のとおりです。

names(m)
# [1] "X"    "X.1"  "X1"   "X3"   "X1.1" "X2"  

あなたはしたい:

  • すべての「X」を削除します
  • すべての「.some-number」を削除します

したがって、回避策は次のとおりです。

# Change the names in your original dataset
names(m) <- gsub("^X|\\.[0-9]$", "", names(m))
# Create a temporary object to match desired names
getme <- names(m) %in% c("", "1", "2")
# Subset your data
smallerdat <- m[getme]
# Reassign names to your subset
names(smallerdat) <- names(m)[getme]
于 2012-12-28T16:17:56.670 に答える
0

あなたが何をしようとしているのかよくわかりませんが、最初の 2 列のヘッダーが欠落している csv ファイルを読み取り、ヘッダーが 1 または 2 の列のみを選択し、保持している新しいデータ ファイルを書き込むコードを次に示します。 1 または 2 の列名。

# first read in only the headers and deal with the missing 
# headers for columns 1 and 2

b <- readLines('c:/users/Mark W Miller/simple R programs/missing_headers.csv', 
     n = 1)
b <- unlist(strsplit(b, ","))
b[1] <- 'name1'
b[2] <- 'name2'
b <- gsub(" ","", b, fixed=TRUE)
b

# read in the rest of the data file

my.data <- (
 read.table(file = "c:/users/mark w miller/simple R programs/missing_headers.csv", 
 na.string=NA, header = F, skip=1, sep=','))

colnames(my.data) <- b

# select the columns with names of 1 or 2

my.data <- my.data[names(my.data) %in% c("1", "2")]

# retain the original column names of 1 or 2

names(my.data) <- floor(as.numeric(names(my.data)))

# write the new data file with original column names

write.csv(
  my.data, "c:/users/mark w miller/simple R programs/missing_headers_out.csv",
            row.names=FALSE, quote=FALSE)

ここに入力データファイルがあります。列 1 と 2 の名前が欠落しているコンマに注意してください。

       ,  ,             1,           3,           1,          2
1415_at, 1,   8.512147859, 8.196725061, 8.174426394, 8.62388149
1411_at, 2,   9.119200527, 9.190318548, 9.149239039, 9.211401637
1412_at, 3,   10.03383593, 9.575728316, 10.06998673, 9.735217522
1413_at, 4,   5.925999419, 5.692092375, 5.689299161, 7.807354922

出力データ ファイルは次のとおりです。

1,1,2
8.512147859,8.174426394,8.62388149
9.119200527,9.149239039,9.211401637
10.03383593,10.06998673,9.735217522
5.925999419,5.689299161,7.807354922
于 2012-12-28T18:41:22.053 に答える