我是R新手,遇到了问题。我正在尝试根据另一个数据帧(“ razdeljena1”)中的数据填充矩阵(“ m”)-所有列和行名或“ m”与在“ razdeljena1”的第一列和第二列中找到的名称匹配“。
m <- matrix(1:729, byrow = TRUE, nrow = 27,
dimnames = list(c("PES", "MAčKA", "VTÁK","HORA","STROM","RIEKA","SLNKO","MÄSO","SYR","VODA","CHLIEB","KLADIVO","METLA","PERO","NÔŽ","POSTEĽ","STÔL","SKRIŇA","LAMPA","TOPÁNKA","NOHAVICE","KLOBÚK","DÁŽDNIK","VEDRO","FĽAŠA","VRECE","KONZERVA"),
c("PES", "MAčKA", "VTÁK","HORA","STROM","RIEKA","SLNKO","MÄSO","SYR","VODA","CHLIEB","KLADIVO","METLA","PERO","NÔŽ","POSTEĽ","STÔL","SKRIŇA","LAMPA","TOPÁNKA","NOHAVICE","KLOBÚK","DÁŽDNIK","VEDRO","FĽAŠA","VRECE","KONZERVA")))
m <- replace(m, 1:729, NA)
这是razdeljena1
中的前12个观测值
1 2 rating.response
[1,] "SYR" "KLADIVO" "1"
[2,] "LAMPA" "DÁŽDNIK" "1"
[3,] "CHLIEB" "KLOBÚK" "1"
[4,] "STROM" "KONZERVA" "1"
[5,] "PERO" "NÔŽ" "1"
[6,] "STÔL" "DÁŽDNIK" "1"
[7,] "STROM" "VODA" "1"
[8,] "DÁŽDNIK" "KONZERVA" "1"
[9,] "PERO" "POSTEĽ" "1"
[10,] "HORA" "VODA" "1"
[11,] "LAMPA" "FĽAŠA" "1"
[12,] "STROM" "SKRIŇA" "1"
为此,我创建了一个while循环,该循环将读取每一行并提取必要的信息并将其写入矩阵。
a <- 1
while (a <379){
beseda1 <- razdeljena1[a,1]
beseda2 <- razdeljena1[a,2]
relat <- razdeljena1[a,3]
m[beseda1, beseda2] <- relat
m[beseda2, beseda1] <- relat
a <- a+1
}
该循环在前9次迭代中运行良好(并正确写入矩阵),然后返回错误Error in [<-(*tmp*, beseda1, beseda2, value = relat) : subscript out of bounds.
,我已经查看了该错误,并且对它的回答表明我正在尝试访问列或行不存在-但是:当我尝试访问循环外部的单元格(具有相同定义的坐标)时,实际上它返回了正确的单元格。
示例:
当beseda1 = "PERO"
和beseda2 = "POSTEĽ"
时发生错误;但是,当我尝试在循环外进行更改时,它就可以正常工作:
beseda1 <- "PERO"
beseda2 <- "POSTEĽ"
m[beseda1, beseda2] <- 1
m[beseda2, beseda1] <- 1
我还试图查看这是否是唯一会引起问题的对(通过以大于9的数字开始while循环)并在某些迭代后得到相同的错误。
答案 0 :(得分:0)
R支持通过包含暗淡名称的两个列字符矩阵进行赋值索引;无需循环。只需执行以下操作即可:
m[ razdeljena1[ , 1:2] ] <- razdeljena1[ , 3]
对于您提供的小示例数据,它成功执行:
> m [ razdeljena1[ , 1:2] ] <- razdeljena1[,3]
> m
PES MAčKA VTÁK HORA STROM RIEKA SLNKO MÄSO SYR VODA CHLIEB KLADIVO METLA PERO NÔŽ
PES NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
MAčKA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
VTÁK NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
HORA NA NA NA NA NA NA NA NA NA "1" NA NA NA NA NA
STROM NA NA NA NA NA NA NA NA NA "1" NA NA NA NA NA
#snipped remaining rows.