我有矩阵

m <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE,dimnames = list(c("s1", "s2", "s3"),c("tom", "dick","bob")))

   tom dick bob
s1   1    2   3
s2   4    5   6
s3   7    8   9

#and the data frame

current<-c("tom", "dick","harry","bob")
replacement<-c("x","y","z","b")
df<-data.frame(current,replacement)

  current replacement
1     tom           x
2    dick           y
3   harry           z
4     bob           b

#I need to replace the existing names i.e. df$current with df$replacement if
#colnames(m) are equal to df$current thereby producing the following matrix


m <- matrix(1:9, nrow = 3, ncol = 3, byrow = TRUE,dimnames = list(c("s1", "s2", "s3"),c("x", "y","b")))

   x y b
s1 1 2 3
s2 4 5 6
s3 7 8 9

有什么建议吗?我应该使用“if”循环吗?谢谢。

最佳答案

您可以使用whichcolnames中的mdf$current中的值进行匹配。然后,当您有了索引时,可以从df$replacement子集替换替换的姓氏。

colnames(m) = df$replacement[which(df$current %in% colnames(m))]

在上面:
  • %in%测试TRUEFALSE是否比较了对象之间的任何匹配。
  • which(df$current %in% colnames(m))标识匹配名称的索引(在本例中为行号)。
  • df$replacement[...]是对列df$replacement进行子集化的基本方法,仅返回与步骤2匹配的行。
  • 09-25 19:39
    查看更多