我是R的新手(和一般的编码)所以如果这是一个愚蠢的问题,我很抱歉,我怀疑这是一个简单的修复,我只是不理解如何正确地创建一个函数,但我们会看到。 / p>
我想在数据框中添加一个新列,其中包含一个依赖于现有列中包含的值的字符串。例如,对于虹膜数据,如果一行在Petal.Width列中包含值“0.2”,我想在新列中粘贴类似“响应字符串1”的字符串。如果Petal.Width中的值= 0.4,则在同一列中粘贴“响应字符串2”。
我试图在here和here的帮助下解决这个问题但未能使其发挥作用。
到目前为止,我有这样的事情:
MyFunction <- function(petalWidth){
if (petalWidth == 0.2){
iris$NewColumn <- paste("Response String 1")
}
}
apply(iris, 1, MyFunction(iris$Petal.Width))
想出这个错误:
Error in get(as.character(FUN), mode = "function", envir = envir) :
object 'Response String 1' of mode 'function' was not found
In addition: Warning message:
In if (petalWidth == 0.2) { :
the condition has length > 1 and only the first element will be used
我尝试过其他一些方法,包括查看for
语句。我不确定如何构建此函数以正常工作。任何想法将不胜感激,我希望我已经提供了足够的可以使这个可重复。谢谢!
答案 0 :(得分:1)
R有很多种方法可以根据条件创建新列。应该没有必要循环或申请这种事情,你应该使用R&#34; vectorised&#34;可以一次作用于所有行的操作:
iris$NewColumn = ifelse(iris$Petal.Width == 0.2, "Response String 1", "Other")
矢量化操作通常要快得多,并且通常会更好地工作,因为当您尝试逐个元素添加到列时可能会导致意外问题。