1

我希望根据另一个条目的值来更改矩阵中某个条目的值。最容易用一个例子来解释:
矩阵

ABC-DEF 1 0 0 0  
HIJ-KLM 0 0 0 0  
NOP-QRS 1 0 0 0  
KLM-HIJ 0 0 0 0  
DEF-ABC 0 0 0 0  
QRS-NOP 0 0 0 0  

如您所见,上述矩阵中的每一行都有一个对应项(例如,ABC-DEF 的对应项是 DEF-ABC)。

有什么方法可以让我查看哪些行在第一列中有一个,然后在对应的第四列中放置一个 2?那么在上面的例子中:

ABC-DEF 1 0 0 0  
HIJ-KLM 0 0 0 0  
NOP-QRS 1 0 0 0  
KLM-HIJ 0 0 0 0  
DEF-ABC 0 0 0 2  
QRS-NOP 0 0 0 2

我很困惑,非常感谢任何帮助!谢谢!

4

1 回答 1

5

假设您的列名是V1,..., V5,您可以执行以下操作:

values <- d$V1[d$V2==1]
d$V5[d$V1 %in% gsub("(...)-(...)","\\2-\\1", values)] <- 2

这将给出:

       V1 V2 V3 V4 V5
1 ABC-DEF  1  0  0  0
2 HIJ-KLM  0  0  0  0
3 NOP-QRS  1  0  0  0
4 KLM-HIJ  0  0  0  0
5 DEF-ABC  0  0  0  2
6 QRS-NOP  0  0  0  2

如果您的数据不是数据框,而是m带有行名的数字矩阵,您可以执行以下操作:

values <- rownames(m)[m[,1]==1]
m[rownames(m) %in% gsub("(...)-(...)","\\2-\\1", values),4] <- 2

编辑:要了解代码在做什么,您必须看到:

gsub("(...)-(...)","\\2-\\1", values)

将通过正则表达式匹配替换values表单向量中的任何字符串。结果是 的“对应物”的字符向量。然后我们使用 选择行名出现在这些对应值中的每一行,并在第四列中为这些行分配。XXX-YYYYYY-XXXvalues%in%2

于 2013-10-08T14:32:42.640 回答