我想将两行标签或名称放入(数据框或矩阵),如下所示:
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
并且能够通过使用两个标签来引用给定列,例如列“Medium”,“Dry”。
答案 0 :(得分:4)
你要求的东西不存在。名称始终是字符向量,因此它们始终是1维的。因此,要么在数据框架/矩阵中使用简单的"Big Wet"
之类的名称,要么必须使用其他数据结构,例如尺寸 size , 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
答案 1 :(得分: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
答案 2 :(得分: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")
这很笨重,我不会走这条路。如果你想要功能性与其他好的回应一起使用。