在R中创建多维数据映射

时间:2016-04-23 15:35:47

标签: r

如果我想在R中表示一组在3个不同维度上键入的值,是否有简单/简洁的方法来生成它?

比如说我有以下键 - 每个维度必须支持具有不同数量的键。以下示例总共将引用360值(3 * 30 * 4):

rating <- c('AA','AAB','C')
timeInYears <- 1:30
monthsUntilStart <- c(1,3,6,12)

所以我希望能够访问,例如,从现在起7年后,从12个月开始,使用以下内容获得AA等级的值:

value <- data[rating=='AA',timeInYears==7,monthsUntilStart==12]

首先,我希望能够为每个密钥组合提供样本生成的值。

实际上它们将从数据库读入,但是要开始使用,从一组虚拟值提供虚拟结构会很好,可以简单地在结构上重复执行。

所以说我们有

values <- c(2.30,2.32,1.98,2.18,2.29,2.22)

因此每个(x,y,z)键都映射到其中一个值。

关于如何最好地接近这一点的任何提示或提示都很受欢迎!

谢谢!

菲尔。

1 个答案:

答案 0 :(得分:3)

您可以在R中使用数组执行此任务。

首先,我们将创建一个包含所有可能性的数据框。根据需要,我们将分配循环到观察长度的值:

Remove-Item D:\Logs -Recurse -Force
New-Item -ItemType directory -Path D:\Logs

接下来,我们转换为数组:

rating <- c('AA','AAB','C')
timeInYears <- 1:30
monthsUntilStart <- c(1,3,6,12)

data <- expand.grid(rating=rating, timeInYears=timeInYears, monthsUntilStart=monthsUntilStart)
data$value <- c(2.30,2.32,1.98,2.18,2.29,2.22) # cycles through

请注意,整数将转换为字符串。

dataarray <- unclass(by(data[["value"]], data[c("rating", "timeInYears", "monthsUntilStart")], identity))

您可以通过索引访问所需的元素(它将返回为此示例分配的随机值)。

> dimnames(dataarray)
$rating
[1] "AA"  "AAB" "C"  

$timeInYears
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14" "15"
[16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"

$monthsUntilStart
[1] "1"  "3"  "6"  "12"

修改

如果您愿意,也可以使用数据框本身。

> dataarray["AA", "7", "12"]
[1] 2.3