【问题标题】:Looping through specified columns in a Matrix and replacing their values by subtracting the value from 4循环遍历矩阵中的指定列并通过从 4 中减去值来替换它们的值
【发布时间】:2021-08-20 08:49:43
【问题描述】:

我是 R 的新手,但我仍然不确定循环。

如果我在 R 中有一个大型矩阵对象,其列的值为 0 - 4,我想为指定的列反转这些值。

我会使用代码:

b[, "AX1"] <- 4 - b[, "AX1"]

其中b 是从较大列表对象中提取的矩阵,AX1 将是矩阵中的一列。

然后我将使用代码将更改后的矩阵替换回其列表中:

DF1$geno[[1]]$data <- b 

如果我使用带有30个列名要倒置?

【问题讨论】:

标签: r


【解决方案1】:

您可以做到这一点的最简单方法(假设您总是以x = 4 - x 的方式对其进行转换)是将您的方法扩展到列列表:

# Create an example dataset

set.seed(68859457)

(
    dat <- matrix(
        data = sample(x = 0:4, size = 100, replace = TRUE),
        nrow = 10,
        dimnames = list(1:10, paste('AX', 1:10, sep = ''))
    )
)

#    AX1 AX2 AX3 AX4 AX5 AX6 AX7 AX8 AX9 AX10
# 1    2   1   2   3   2   2   3   1   0    4
# 2    4   3   4   4   0   1   3   1   3    4
# 3    3   0   3   4   2   2   4   1   2    1
# 4    2   2   0   2   4   2   2   1   1    0
# 5    4   4   4   3   3   1   0   3   2    2
# 6    2   1   1   0   3   3   4   4   1    0
# 7    2   3   1   3   3   1   0   1   0    4
# 8    2   2   1   1   0   3   1   3   2    1
# 9    3   1   4   1   2   1   0   0   4    1
# 10   4   3   2   4   1   0   2   0   3    2

# Create a list of columns you want to modify

set.seed(68859457)

(
    cols_to_invert <- sort(sample(x = colnames(dat), size = 5))
)

# [1] "AX3" "AX4" "AX5" "AX6" "AX9"

# Use the list of columns created above to modify matrix in place

dat[, cols_to_invert] <- 4 - dat[, cols_to_invert]

# See the result

dat

#    AX1 AX2 AX3 AX4 AX5 AX6 AX7 AX8 AX9 AX10
# 1    2   1   2   1   2   2   3   1   4    4
# 2    4   3   0   0   4   3   3   1   1    4
# 3    3   0   1   0   2   2   4   1   2    1
# 4    2   2   4   2   0   2   2   1   3    0
# 5    4   4   0   1   1   3   0   3   2    2
# 6    2   1   3   4   1   1   4   4   3    0
# 7    2   3   3   1   1   3   0   1   4    4
# 8    2   2   3   3   4   1   1   3   2    1
# 9    3   1   0   3   2   3   0   0   0    1
# 10   4   3   2   0   3   4   2   0   1    2

【讨论】:

    【解决方案2】:

    在不知道数据的确切结构的情况下很难判断,但根据您的解释和尝试,这可能会有所帮助。

    cols <- c('AX1', 'AX10', 'AX42')
    
    DF1$geno <- lapply(DF1$geno, function(x) {
      x$data <- 4 - x$data[, cols]
      x
    })
    

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 2022-08-18
      相关资源
      最近更新 更多