我有以下数据框' adjustedShiftLengths':
PositionCDF Avg_shift_len Avg_shift_median Adjusted_avg_shift_len
1 Emergency Medicine - Nurse 6 6 0
2 Nurse 6 6 0
3 Nurse - Intensive Care 6 6 0
我想更新' Adjusted_avg_shift_len'通过应用函数在每个行的数据框中。基本上是在" Adjusted_avg_shift_len'中更新的新值。应该让我们说调用另一个函数的结果getAdjustedShiftLengths(Avg_shift_len)
这是我到目前为止所做的:
updateAdjustedValues <- function (valueToBeRounded, row) {
adjustedShiftLengths$Adjusted_avg_shift_len[row] <- adjustShiftLength(valueToBeRounded)
}
我不确定如何传入&#39;行&#39; apply函数的值(即函数updateAdjustedValues的参数)
> apply(adjustedShiftLengths, 1, updateAdjustedValues(adjustedShiftLengths$Avg_shift_len,row ))
答案 0 :(得分:1)
您没有将row
参数传递给apply
;相反,apply
将传递一行作为它正在调用的函数的第一个参数。
您的代码应如下所示:
adjustedShiftLengths['Adjusted_avg_shift_len'] <- apply(adjustedShiftLengths, 1, updateAdjustedValues)
但是你需要调整你的函数updateAdjustedValues
updateAdjustedValues <- function (row) {
getAdjustedShiftLengths(row['Avg_shift_len'])
}
另一种方法是使用transform
,我认为这更适合您的情况。
transform(adjustedShiftLengths, Adjusted_avg_shift_len=getAdjustedShiftLengths(Avg_shift_len))
使用transform
时,您可以直接按名称访问列,即您位于数据框的范围内。因此,使用transform
的一种可能方式是
df <- transform(df, ExistingColumn1 = ExistingColumn1 ^ 2, ExistingColumn2 = someFunction(ExistingColumn2), NewColumn = ExistingColumn1 + ExistingColumn2)
实施例
sq <- function(x) x^2
df <- iris
df <- transform(iris, Sepal.Length = Sepal.Length * 1000, Sepal.Width = sq(Sepal.Width), Sepal.Weirdo = Sepal.Length + Sepal.Width)
在此示例中,将创建名为Sepal.Weirdo
的新变量(列),但其值将根据现有的Sepal.Length
和Sepal.Width
值,而不是transform
之后的值{1}} df
。
注意:如果您拥有大型数据集,则可以考虑使用data.table
。