我知道如何对从文件中读取的表进行一些转换:
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
答案 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)