R函数合并矩阵的列

bfnvny8b  于 2023-05-26  发布在  其他
关注(0)|答案(3)|浏览(128)

我有一个二进制矩阵,我想合并列a和b。如果有1和0,则输出应为1。0和0应该保持为0,但1和1也应该保持为1。

a   b    c 
a  1   0    1
b  0   0    0
c  1   1    1

所以最后应该是这样的

ab  c
a  1   1
b  0   0
c  1   1

我该怎么做?
我在考虑使用粘贴函数来创建一个新列,但我不希望输出为11,01,00,而只是一个数字

iibxawm4

iibxawm41#

试试(rowSums(df[,c("a","b")])>0)*1

7kqas0il

7kqas0il2#

您可以通过使用R中的pmax函数来实现所需的结果,该函数用于获取多个向量的元素最大值。在这种情况下,您可以使用pmax来比较列“a”和“B”的相应元素,并使用每对的最大值创建新列“ab”。
下面是将二进制矩阵中的列“a”和“B”合并为新列“ab”的代码:

# Create the binary matrix
matrix <- matrix(c(1, 0, 1, 0, 0, 1, 1, 0, 1), nrow = 3, ncol = 3, byrow = TRUE)
colnames(matrix) <- c("a", "b", "c")
rownames(matrix) <- c("a", "b", "c")

# Merge columns "a" and "b" into "ab"
matrix$ab <- pmax(matrix$a, matrix$b)

# Remove columns "a" and "b"
matrix <- matrix[, c("ab", "c")]

# Print the resulting matrix
print(matrix)

得到的merged_matrix将具有列ab和c:

ab c
a  1 1
b  0 0
c  1 1

生成的矩阵有一个新列“ab”,其中包含列“a”和“b”的合并值,遵循您指定的规则。

mf98qq94

mf98qq943#

另一个使用逻辑运算符的选项(尽管最好先将数据转换为logical):

data_mat <- matrix(c(1, 0, 1, 0, 0, 1, 1, 0, 1), nrow = 3)
dimnames(data_mat) <- list(c("a", "b", "c"), c("a", "b", "c"))

result_mat <- as.data.frame(data_mat)
result_mat[["ab"]] <-
  as.integer(Reduce("|", result_mat[, c("a", "b")]))
result_mat <- as.matrix(result_mat[, c("ab", "c")])
result_mat
#>   ab c
#> a  1 1
#> b  0 0
#> c  1 1

创建于2023-05-26带有reprex v2.0.2

相关问题