我有一个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
答案 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