计算R中的比率
如果我有此数据集:计算R中的比率,r,R,如果我有此数据集: Name从dplyr包中使用case\u时: library(dplyr) MyData$Ratios <- case_when( is.na(MyData$Xnum) & is.na(MyData$Ynum) ~ 1, is.na(MyData$Xnum) & MyData$Ynum >= 0 ~ 1, MyData$Xnum >= 0 & is.na(MyData$Ynum) ~ 0, TRUE
Name从dplyr
包中使用case\u时:
library(dplyr)
MyData$Ratios <-
case_when(
is.na(MyData$Xnum) & is.na(MyData$Ynum) ~ 1,
is.na(MyData$Xnum) & MyData$Ynum >= 0 ~ 1,
MyData$Xnum >= 0 & is.na(MyData$Ynum) ~ 0,
TRUE ~ MyData$Xnum / MyData$Ynum
)
库(dplyr)
MyData$比率=0~1,
MyData$Xnum>=0&is.na(MyData$Ynum)~0,
TRUE~MyData$Xnum/MyData$Ynum
)
添加所需的输出。有一点,您不需要使用.double
或0.0中的.0。例如,idential(0,as.double(0.0))
返回TRUE。看起来你来自不同的语言。在R基中有双精度和整数,就是这样。蒂姆,这很完美,正是我想要的。如果我还没有在手册中看到这种情况。
`If Xnum == NA AND Ynum == NA
Ratio = 1
Else if Xnum == NA AND Ynum >= 0
Ratio = 1
Else if Xnum >= 0 AND Ynum == NA
Ratio = 0
Else
Ratio = Xnum / Ynum`
`determine_ratios <- function( PrevTotal, AllTotal ) {
if ( (is.na(PrevTotal)) && (is.na(AllTotal)) ) {
return(as.double(1.0))
} else if ((PrevTotal >= 0) && (is.na(AllTotal)) ) {
return(as.double(1.0))
} else if ((is.na(PrevTotal)) && (AllTotal >= 0) ) {
return(as.double(0.0))
} else {
return(as.double(PrevTotal / AllTotal ))
}
}`
`MyData$Ratios <- determine_ratios(MyData$Xnum, MyData$Ynum)`
`print(MyData)
Name Xnum Ynum Ratios
1 Bill 5 10 0.5
2 Ben NA 5 NA
3 Lisa 10 NA NA
4 Maya NA NA NA`
`print(MyData)
Name Xnum Ynum Ratios
1 Bill 5 10 0.5
2 Ben NA 5 1
3 Lisa 10 NA 0
4 Maya NA NA 1`
library(dplyr)
MyData$Ratios <-
case_when(
is.na(MyData$Xnum) & is.na(MyData$Ynum) ~ 1,
is.na(MyData$Xnum) & MyData$Ynum >= 0 ~ 1,
MyData$Xnum >= 0 & is.na(MyData$Ynum) ~ 0,
TRUE ~ MyData$Xnum / MyData$Ynum
)