【发布时间】:2021-08-28 18:05:07
【问题描述】:
我想使用 if else 语句根据另一列中的数据在我的数据框中创建一个新列。我查看了一些先前的(例如this one 和this one),但似乎做错了什么,因为我收到错误或没有新列。
我尝试过创建一个 ifelse 函数:
if(x >= 4000)
{print (">4000")
} else if (x >=3000 & x <= 4000)
{print ("3000-4000")
} else if (x >=2000 & x <= 3000)
{print("2000-3000")
} else if (x >=1000 & x <= 2000)
{print("1000-2000")
} else print ("<1000")}
这个函数工作/运行,但我不知道如何将它应用到我的数据框中的一列(我试过这个dat$P.bins <- Bins(dat$Pcol),但得到以下错误:条件长度> 1,只有第一个将使用元素1">4000"
我也尝试过运行 ifelse 语句:
dat$P.bin<- ifelse(P.col>=4000, ">4000",
ifelse(P.col <=4000 & >= 3000, "3000-4000"),
ifelse(P.col<=3000 & >= 2000, "2000-3000"),
ifelse(P.col <=2000 & >=1000, "1000-2000"),
ifelse(P.col <1000, "1000"))
但出现此错误:错误:意外'>=' in:"dat$P.bins =4000, ">4000",felse(Pcol =". With this语句我不确定如何在 ifelse 语句中做一个范围。
任何帮助或指导将不胜感激!
【问题讨论】:
-
只需将您的代码包装在函数定义中。如
my_function<-function(x) { if (x>=4000) {">4000} else if .......。然后拨打my_function(yourdataframe$yourcolumn) -
当我尝试这样做并运行上面的代码时,我得到了这些错误:
if (x == ">4000") { : argument is of length zero中的错误和`条件长度> 1,并且只使用第一个元素[1] ">4000 ” `我该如何解决这个问题?我不确定参数的长度为零,也不确定为什么 print 参数不能正常工作。 -
当我在运行代码并收到错误后查看我的数据框时,它添加了一个新列,但所有值都 >4000(没有将 P.col 中的值放入新列)。当我尝试从我的函数中删除该行时,我仍然得到相同的错误,但下一个值下降。只能在 if else 语句的 print 函数中输入数字吗?
标签: r if-statement nested dplyr