当条件成立时,从R中的矩阵中减去数字

时间:2014-03-21 04:37:49

标签: r if-statement matrix subtraction

我知道如何对从文件中读取的表进行一些转换:

data = read.table(file, sep=" ", header=TRUE, stringsAsFactors=F)
data_transformed=cbind(data[, 1], round(
        data[, seq(from = 3, to = ncol(data), by = 3)] *100 /
        data[, seq(from = 2, to = ncol(data), by = 3)], digits=2))

如何取代" Inf" by" 0"。

data_transformed[data_transformed==Inf] <- 0

现在,我需要将每个大于100的数字替换为(value-2 *(value-100)),这样130将被70替换,110将替换为90.

我正在使用以下代码,但不起作用:

data_transformed[data_transformed>100] <- (data_transformed-2*(data_transformed-100))

有任何建议如何解决?非常感谢你。

我收到此错误:

Error in rowMeans(data_transformed, na.rm = TRUE) : 'x' must be numeric

1 个答案:

答案 0 :(得分:1)

我相信你复制了错误的错误陈述。很有可能得到这个警告:

Warning message:
In data_transformed[data_transformed > 100] <- data_transformed -  :
  number of items to replace is not a multiple of replacement length

正如@IShouldBuyABoat在评论中提到的那样。您在LHS上有一个过滤器data_transformed > 100,但您在RHS上没有过滤器。看到这段代码:

set.seed(1)
data <- matrix(round(rbinom(210, 3, .5) * 100), ncol = 21)
head(data)

data_transformed <- cbind(data[, 1],
  round(data[, seq(from = 3, to = ncol(data), by = 3)] * 100 /
        data[, seq(from = 2, to = ncol(data), by = 3)], digits = 2))
head(data_transformed)

data_transformed[data_transformed == Inf] <- 0
head(data_transformed)

a <- data_transformed > 100
a

# data_transformed[data_transformed > 100] <-
#   data_transformed - 2 * (data_transformed - 100)

data_transformed[a] <-
  data_transformed[a] - 2 * (data_transformed[a] - 100)

head(data_transformed)