2

次のように、2 行のラベルまたは列名を (データ フレームまたはマトリックスのいずれかに) 配置したいと考えています。

  Big Big Medium Medium Low Low
  Wet Dry    Wet    Dry Wet Dry
1   6   4      1      3   2   5
2   4   4      1      3   1   6
3   4   3      1      3   1   6
4   5   2      1      2   1   4
5   3   4      1      2   3   5

また、2 つのラベルを使用して特定の列を参照できます (たとえば、列 "Medium"、"Dry")。

4

3 に答える 3

4

あなたが求めるものは存在しません。名前は常に文字ベクトルであるため、常に 1 次元です。したがって、データフレーム/マトリックスのような単純な名前を使用するか、サイズウェット/ドライを個別に指定できる"Big Wet"3次元配列などの別のデータ構造を使用する必要があります。

> array(c(6,4,4,5,3,4,4,3,2,4,1,1,1,1,1,3,3,3,2,2,2,1,1,1,3,5,6,6,4,5),
        c(5,2,3), list(1:5, c("Wet", "Dry"), c("Big", "Medium", "Low")))
, , Big

  Wet Dry
1   6   4
2   4   4
3   4   3
4   5   2
5   3   4

, , Medium

  Wet Dry
1   1   3
2   1   3
3   1   3
4   1   2
5   1   2

, , Low

  Wet Dry
1   2   5
2   1   6
3   1   6
4   1   4
5   3   5

> a[, "Wet",]
  Big Medium Low
1   6      1   2
2   4      1   1
3   4      1   1
4   5      1   1
5   3      1   3

> a[, "Dry", "Medium"]
1 2 3 4 5 
3 3 3 2 2 
于 2013-01-09T04:24:08.297 に答える
1

これはあなたが求めていたものを提供しますが、視覚化以外には何の価値もありません:

dat <- read.table(text="1   6   4      1      3   2   5
2   4   4      1      3   1   6
3   4   3      1      3   1   6
4   5   2      1      2   1   4
5   3   4      1      2   3   5", header=FALSE)[, -1]

nms1 <- unlist(strsplit(gsub("\\s+", " ", "Wet Dry    Wet    Dry Wet Dry"), " "))
nms2 <- unlist(strsplit("Big Big Medium Medium Low Low", " "))

dat2 <- rbind(nms1, dat)
colnames(dat2) <- nms2

rownames(dat2) <- c(" ", 1:(nrow(dat2) - 1))
dat2

収量:

  Big Big Medium Medium Low Low
  Wet Dry    Wet    Dry Wet Dry
1   6   4      1      3   2   5
2   4   4      1      3   1   6
3   4   3      1      3   1   6
4   5   2      1      2   1   4
5   3   4      1      2   3   5

そして索引付け:

indexer <- function(x, y) as.numeric(dat2[-1, colnames(dat2) == x & dat2[1, ] == y])
indexer("Big", "Dry")

これは不格好で、私はこのルートには行きません。機能が必要な場合は、他の優れた応答を使用してください。

于 2013-01-09T04:41:08.937 に答える
1
text <- "  Big Big Medium Medium Low Low
  Wet Dry    Wet    Dry Wet Dry
1   6   4      1      3   2   5
2   4   4      1      3   1   6
3   4   3      1      3   1   6
4   5   2      1      2   1   4
5   3   4      1      2   3   5"

ファイルから読み取り、以下で使用するfileパラメーターではなくパラメーターを使用する可能性がありtextます。

labs <- read.table(header=FALSE, text=text, nrows=2)  # This will be used to construct the headers.
data <- read.table(header=TRUE, text=text, skip=1)    # Consume a header line so that the row IDs are not interpreted as data.
names(data) <- apply(labs, 2, paste, collapse=',')    # Overwrite the header read above.

> data

  Big,Wet Big,Dry Medium,Wet Medium,Dry Low,Wet Low,Dry
1       6       4          1          3       2       5
2       4       4          1          3       1       6
3       4       3          1          3       1       6
4       5       2          1          2       1       4
5       3       4          1          2       3       5

> data['Big,Wet']
  Big,Wet
1       6
2       4
3       4
4       5
5       3
于 2013-01-09T04:18:32.247 に答える