R 跨多行替换特定值
我有一个数据文件,包含多列和数百行,与此演示表类似: 0.91304348 0.08333333 0.25000000 1.00000000 1.00000000 0.85714286 0.08333333 0.43478261 0.12500000 1.00000000 1.00000000 1.00000000 0.16666667 1.00000000 1.00000000 我希望查看所有值,并通过从值中减去0.5并用结果值替换大于0.5的任何值。 例如,如果值是0.85714286,我会用0.35714286(即0.85714286-0.5)替换该值。R 跨多行替换特定值,r,R,我有一个数据文件,包含多列和数百行,与此演示表类似: 0.91304348 0.08333333 0.25000000 1.00000000 1.00000000 0.85714286 0.08333333 0.43478261 0.12500000 1.00000000 1.00000000 1.00000000 0.16666667 1.00000000 1.00000000 我希望查看所有值,并通过从值中减去0.5并用结果值替换大于0.5的任何值。 例如,如果值是0.85714286,我会
但是一个的值,我们可以创建一个逻辑矩阵,并使用该索引通过减法替换这些值,并将其分配给相应的位置
i1 <- m1 > 0.5
m1[i1] <- m1[i1] - 0.5
i10.5
m1[i1]当
library(dplyr)
df %>%
mutate(across(where(is.numeric),
~ case_when(. > 0.5 ~ .-0.5,
TRUE ~ .)))
输出:
X1 X2 X3 X4 X5 X6 X7 X8 X9
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <lgl>
1 0.413 0.0833 0.25 0.5 0.5 0.357 0.0833 0.435 NA
2 0.125 0.5 0.5 0.5 0.167 0.5 0.5 NA NA
x1x2x3x4x5x6x7x8x9
1 0.413 0.0833 0.25 0.5 0.5 0.357 0.0833 0.435 NA
2 0.125 0.5 0.5 0.5 0.167 0.5 0.5 NA NA
如果您还想使用for循环:
for(i in 1:nrow(df)) {
for(j in 1:ncol(df)) {
if(df[i, j] > 0.5) {
df[i, j] <- df[i, j] - 0.5
}
}
}
df
a b
1 0.91304348 0.4347826
2 0.08333333 0.1250000
3 0.25000000 1.0000000
4 1.00000000 1.0000000
5 1.00000000 1.0000000
6 0.85714286 0.1666667
7 0.08333333 1.0000000
谢谢,for循环工作得很好!
0.08333333), b = c(0.43478261, 0.125, 1, 1, 1, 0.16666667, 1)), class = "data.frame", row.names = c(NA,
-7L))