Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 跨多行替换特定值_R - Fatal编程技术网

R 跨多行替换特定值

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,我会

我有一个数据文件,包含多列和数百行,与此演示表类似:

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)替换该值。
但是一个的值,我们可以创建一个逻辑矩阵,并使用该索引通过减法替换这些值,并将其分配给相应的位置

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))