【发布时间】:2012-12-31 20:07:50
【问题描述】:
我有一个数据框z,我想根据z 的两个旧列的值创建新列。以下是流程:
>z<-cbind(x=1:10,y=11:20,t=21:30)
> z<-as.data.frame(z)
>z
x y t
1 1 11 21
2 2 12 22
3 3 13 23
4 4 14 24
5 5 15 25
6 6 16 26
7 7 17 27
8 8 18 28
9 9 19 29
10 10 20 30
# 生成列q,如果x=3 等于列t 的值乘以4,对于x 的其他值,它等于列t 的值。
for (i in 1:nrow(z)){
z$q[i]=if (z$x[i]==4) 4*z$t[i] else z$t[i]}
但是,我的问题是我想应用多个条件:
例如,我想得到这样的东西:
(If x=2, q=t*2; x=4, q=t*4; x=7, q=t*3; for other it is equal to t)
> z
x y t q
1 1 11 21 21
2 2 12 22 44
3 3 13 23 23
4 4 14 24 96
5 5 15 25 25
6 6 16 26 26
7 7 17 27 81
8 8 18 28 28
9 9 19 29 29
10 10 20 30 30
如何使用循环或任何其他方法获得第二个输出?
【问题讨论】:
-
另外,使用
ifelse比使用for循环更好。而不是(for i in 1:length(x)) y[i] <- if ... else ...你可以做y <- ifelse(logical, true, false) -
@Señor :根据您的建议,我发布了我自己问题的答案。谢谢!
标签: r loops multiple-columns