首页 > 解决方案 > 组合字符向量并使用该向量的负数将行或列置零

问题描述

我有一个数据框和两个字符向量,它们具有该数据框的某些列名称,例如:

    dat <- read.table(
  text = "A   B   C   D   E   F   G   H   I   J
  A   0   1   1   1   0   1   0   1   1   0
  B   1   0   0   0   1   0   1   0   0   1
  C   0   0   0   1   1   0   0   0   0   0
  D   1   0   1   0   0   1   0   1   0   1
  E   0   1   0   1   0   1   1   0   1   0
  F   0   0   1   0   0   0   1   0   0   0
  G   0   1   0   1   0   0   0   0   0   0
  H   1   0   1   0   0   1   0   0   0   1
  I   0   1   0   1   1   0   1   0   0   0
  J   1   0   1   0   0   1   0   1   0   0",
  header = TRUE
)

charvec1 <- c("A","C","E")
charvec2 <- c("I","J","D")

我想将两个字符向量放在一起,并将不在该新向量中的数据帧的行和列设置为零。

我尝试执行以下操作但没有取得多大成功:

# put the two character vectors together
charvec3 <- c(t(outer(charvec1 , charvec2 , paste)))

# use the character vectors to put the column names which are not mentioned to zero
dat[-charvec3,] <- 0 # Row will be set to zero
dat[,-charvec3] <- 0 # Column will be set to zero, 

有人可以向我解释如何正确执行此操作吗?

标签: rvectorcharacter

解决方案


charvec <- c(charvec1, charvec2)
dat[, !colnames(dat) %in% charvec] <- 0
dat[!rownames(dat) %in% charvec, ] <- 0

推荐阅读