R中数据框中列的替换值

时间:2014-02-17 04:49:18

标签: r

我有一个data.frame mat。我想创建数据框res,意味着如果第二列是1,则替换相应的第一列值,如果它是0,则将其替换为Inf。我怎么能在R?中做到这一点?

      c1 = c(10, 1, 3, 4, 6, 8)
      c2 = c(1, 1, 0, 1, 0, 1)
      mat = data.frame(c1=c1, c2=c2)
      > mat
        c1 c2
      1 10  1
      2  1  1
      3  3  0
      4  4  1
      5  6  0
      6  8  1

     > c2 = c(10, 1, Inf, 4, Inf, 8)
     > res = data.frame(c1=c1, c2=c2)
     > res
       c1  c2
     1 10  10
     2  1   1
     3  3 Inf
     4  4   4
     5  6 Inf
     6  8   8

3 个答案:

答案 0 :(得分:1)

使用ifelse并尝试此操作:

> (res <- transform(mat, c2=ifelse(c2==1, c1, Inf)) )
  c1  c2
1 10  10
2  1   1
3  3 Inf
4  4   4
5  6 Inf
6  8   8

答案 1 :(得分:0)

这应该可以解决问题

res <- mat
res[res$c2 == 1,]$c2 <- res[res$c2 == 1,1]
res[res$c2 == 0,]$c2 <- Inf

答案 2 :(得分:0)

通过简单的划分,这非常简单有效:

transform(mat, c2 = c1 / c2)

  c1  c2
1 10  10
2  1   1
3  3 Inf
4  4   4
5  6 Inf
6  8   8