如何根据条件替换R中的数据帧值

时间:2018-02-23 18:10:05

标签: r dataframe transform multiple-columns

如果我的数据框包含以下具有以下元素的列

    w x y z
    0 0 1 2
    0 0 3 4
    0 0 5 6

如何在不直接调用列的情况下更改非零列的值?

例如,如果我想通过乘以10来更新非零值

    w x  y z
    0 0 10 20
    0 0 30 40
    0 0 50 60

3 个答案:

答案 0 :(得分:2)

您可以使用[对所需数据框的一部分进行子集化,并以相同的方式计算替换值:

> df <- data.frame(w = c(0,0,0), x = c(0,0,0), y = c(1,3,5), z = c(2,4,6))
> df[df != 0] <- df[df != 0] * 10
> df
  w x  y  z
1 0 0 10 20
2 0 0 30 40
3 0 0 50 60

虽然如果你实际上只是乘以10,你可以df <- df * 10得到相同的结果。

答案 1 :(得分:2)

在你的例子中,你可以简单地乘以10:)

 plouf
  w x y z
1 0 0 1 2
2 0 0 3 4
3 0 0 5 6
 plouf*10
  w x  y  z
1 0 0 10 20
2 0 0 30 40
3 0 0 50 60

答案 2 :(得分:1)

将每个单元格乘以10(0仍然是0;然后是 - )

df <- read.table(text =
"w x y z
0 0 1 2
0 0 3 4
0 0 5 6", sep = " ", header = T)
df
df = df * 10

结果:

  w x  y  z
1 0 0 10 20
2 0 0 30 40
3 0 0 50 60

广义解决方案:要忽略任何选择值(甚至是更复杂的过滤器表达式),您只能选择没有此值的单元格并更新它们:

df[df != 1] <- df[df != 1] * 10

结果:

  w x  y  z
1 0 0  1 20
2 0 0 30 40
3 0 0 50 60

注意:如果您不使用,的方括号中的data.frame,则表达式将应用于符合此条件的所有单元格...