我有以下数据框:
A B C
1 SS 2 20
2 TT 3 15
3 SS 10 150
4 TT 12 121
5 UU 1 2
6 SS 4 48
7 TT 5 40
8 UU 3 12
9 UU 10 60
当A列为SS且B为2.99及以下时,介于3和5.99之间,6及以上时,将B列中的值乘以10,12和15,在C列中为行1分别给出20,150和48,分别为3和6。
当A列为TT且B为3.99及以下时,介于4和6.99之间,7及以上时,将B列中的值乘以5,8和11,得到第2行中C,15,121和40,分别为4和7。
当A列为UU且B为1.99及以下时,介于2和7.99之间,8及以上时,将B列中的值乘以2,4和6,在C列中为第5行给出2,12和60,分别为8和9。
我正在考虑将计算分解为2个步骤,首先创建一个满足条件集C的列C,然后是另一个用于计算的列E(下面未显示)。我尝试了以下方法:
df%>%mutate(D = ifelse(A ==' SS'& B< 3,10,ifelse(A ==' SS'& B) > 6,15,12)))并仅获得SS的输出。
A B C D. 1 SS 2 20 10 2 TT 3 15 12 3 SS 10 150 15 4 TT 12 121 12 5 UU 1 2 12 6 SS 4 48 12 7 TT 5 40 12 8 UU 3 12 12 9 UU 10 60 12
我试图弄清楚如何重复上述TT和UU的条件。
我非常感谢能在R中做到这一点的任何指导。
非常感谢您提供的任何建议。
答案 0 :(得分:0)
您可以尝试:
For (I in 1:nrow (your_df)){
If (your_df[I,1] == "A" and your_df[I,2] > 2.99){
your_df[I,3] = your_df[I,2] *20
}else if (new_cobdition){
......code
}else {
.......code
}
}
对任何错误感到抱歉。刚从我的手机上做到了。
答案 1 :(得分:0)
不确定这是否适合您的问题,但也许这就是您要找的?
multipFactor <- function(a,b){
if(a == "SS"){
if(b < 3){
return(10)
else if(3 <= b && b <=6){
return(12)
}else if(6 < b){
return(15)
}
}else if(a == "TT"){
if(b < 4){
return(5)
else if(4 <= b && b <=7){
return(8)
}else if(7 < b){
return(11)
}
}else if(a == "UU"){
if(b < 2){
return(2)
else if(2 <= b && b <=8){
return(4)
}else if(8 < b){
return(6)
}
}else{
error()
}
}
C <- apply(yourDataFrame[,c('A','B')],1,function(x) multipFactor (x[1],x[2])*x[2] )