我有一个二进制矩阵,我想合并列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,而只是一个数字
iibxawm41#
试试(rowSums(df[,c("a","b")])>0)*1
(rowSums(df[,c("a","b")])>0)*1
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”,其中包含列“a”和“b”的合并值,遵循您指定的规则。
mf98qq943#
另一个使用逻辑运算符的选项(尽管最好先将数据转换为logical):
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
3条答案
按热度按时间iibxawm41#
试试
(rowSums(df[,c("a","b")])>0)*1
7kqas0il2#
您可以通过使用R中的pmax函数来实现所需的结果,该函数用于获取多个向量的元素最大值。在这种情况下,您可以使用pmax来比较列“a”和“B”的相应元素,并使用每对的最大值创建新列“ab”。
下面是将二进制矩阵中的列“a”和“B”合并为新列“ab”的代码:
得到的merged_matrix将具有列ab和c:
生成的矩阵有一个新列“ab”,其中包含列“a”和“b”的合并值,遵循您指定的规则。
mf98qq943#
另一个使用逻辑运算符的选项(尽管最好先将数据转换为
logical
):创建于2023-05-26带有reprex v2.0.2