我在R中有一個兩列數據框,我想添加第三列,其值是前兩個的函數。 只要功能是一個簡單的數學公式沒有問題 data$c <- data$a*15 - 10 + data$b*0.5
但我的功能是不連續的,幷包含條件語句,我想這樣做: foo <- function(x,y){if (x<2) {return(0)} else {....}
和 data$c <- foo(data$a, data$b)
但是,這讓我的錯誤。我錯過了什麼?如何使用R中的函數
3
A
回答
0
df = data.frame(a=rnorm(20),b=runif(20))
new_var = function(x,y)
{
if(x<0)
{ x = x^2}
else
{ x = x^3}
if(y<.5)
{ -log10(y)}
else
{
exp(y)
}
return((2*(x+y))/x*y)
}
df$c = sapply(1:length(df$a), function(i){new_var(df$a[i],df$b[i])})
head(df)
a b c
1 -0.09149107 0.04834675 0.65517298
2 -2.43732351 0.04086087 0.08228385
3 -1.69573283 0.54795413 1.30474339
4 -0.40106220 0.72952356 8.07641367
5 -0.38244706 0.65524147 7.18118555
6 0.76334945 0.38455655 1.43404971
2
您正在尋找ifelse
功能。首先創建一個數據幀:
> d <- data.frame(x = rnorm(5), y=rnorm(5))
> d
x y
1 -0.3581471 0.18149804
2 0.5096839 0.01260114
3 0.6742558 1.04851531
4 1.0761349 -0.17504221
5 -0.2373933 -1.11475886
現在創建使用ifelse
一個額外的列:
> d$z <- ifelse(d$x < 0, 0, d$y + 1)
> d
x y z
1 -0.3581471 0.18149804 0.0000000
2 0.5096839 0.01260114 1.0126011
3 0.6742558 1.04851531 2.0485153
4 1.0761349 -0.17504221 0.8249578
5 -0.2373933 -1.11475886 0.0000000
相關問題
- 1. 如何在R中使用BoxCoxTrans函數?
- 2. 如何在R中使用write.table函數?
- 3. 在函數中使用函數:R
- 4. 如何在R上使用ddply函數?
- 5. R:如何使用對數標度中的函數符號()
- 6. 如何在R中的函數2中使用函數1的輸出?
- 7. 如何在R中的for循環中使用sum函數?
- 8. 如何使用R中函數名稱的字符串調用函數?
- 9. 使用R公式中的函數
- 10. R函數中點/週期的使用
- 11. R中的熱圖(使用heatmap()函數)
- 12. 如何在R中使用render.3dmovie函數的vertex.css.class選項
- 13. 如何提取R包中使用的函數?
- 14. 如何使用R包中未導出的函數?
- 15. 如何使用表函數獲得R中的比例?
- 16. 如何在R中使用與佈局結合的對函數?
- 17. 如何在R包函數中使用非ASCII符號(例如£)?
- 18. 如何賦值函數中的R
- 19. Rcpp - 如何從Rcpp函數中調用R函數Shiny
- 20. 使用if/else函數R
- 21. 使用字符R函數
- 22. 如何使用nrow()函數獲取R中.csv文件中#行數的計數
- 23. 如何使用R中的函數更新數據幀中的變量值?
- 24. 如何在R中調用函數時檢索R
- 25. 中的R函數
- 26. 如何在R中使用子字符串函數?
- 27. 如何在R中使用聚合函數
- 28. 如何在R中,使用REGEXP在sqlquery函數
- 29. 如何在R中使用子字符串函數?
- 30. 如何在R中使用變量函數?
試着問一個問題時提供更多的信息。如果有人幫助你。 –
這個問題完全可以回答,因爲它是。 –