使用 R 中的多参数用户定义函数将列添加到数据框中

Posted

技术标签:

【中文标题】使用 R 中的多参数用户定义函数将列添加到数据框中【英文标题】:Adding a column to a data frame with a multi-parameter user defined function in R 【发布时间】:2013-04-30 16:05:10 【问题描述】:

我有一个数据框x,其中包含 8 个整数列(以及大约 1000 行数据)。我创建了一个 UDF“测试”,它接受 8 个整数参数并返回一个值。我通过传递任意整数值测试了 UDF,它确实返回了一个值,所以我知道它可以工作。我现在想将 8 个整数列逐行传递,并让它将值作为数据框中每一行的新列返回。我尝试过x$NewColumn = test(x$Col1, x$Col2 .... x$Col8),但该函数返回一个错误,表明数据未正确传递。谁能告诉我我做错了什么?

【问题讨论】:

欢迎来到 Stack Overflow!请在此处为好人添加可重复的样本以帮助您。见***.com/questions/5963269/… 【参考方案1】:
df = data.frame(matrix(runif(80),ncol=8))
# creation of a matrix for the example

my.function = function (x)  return (mean(x))  # write your function

# and then use the apply function

new.column = apply(df,1, my.function)

df$new.column = new.column

【讨论】:

【参考方案2】:

你可以使用mapply

mapply(test, x$Col1, x$Col2 .... x$Col8)

【讨论】:

你不觉得apply 在这种情况下更方便吗?数据已经在data.frame 中。 mapply许多 方法之一,但 OP 应该 使用最适合的方法。我不同意他们应该使用mapply,因为它看起来不太方便,但他们可以 apply 首先将data.frame 转换为matrix,这可能不是我们所希望的。 OP 已经声明他们有整数列。 @geektrader 我最终使用了这种方法,因为在我有限的背景下,它是最容易理解的方法。感谢您的帮助。【参考方案3】:

尝试使用 apply 函数在 data.frame 的行中运行:

## Create some data
df <- as.data.frame( matrix(runif(40),10) )

## Now we can use 'apply'. The '1' in the second argument means we apply across rows, if it were two we would apply across columns.
## The function we are applying to each row is to sum all the values in that row
df$Total <- apply( df , 1 , sum )


## We can also pass 'anonymous' functions. In this instance our function takes a single vector, 'x'
## 'x' is all the values of that row, and we can use them like so to do the same thing as 'sum' in the previous example
df$Function <- apply( df , 1 , function(x) x[1] + x[2] + x[3] + x[4] )

## And if we see what is in df, 'df$Total' and 'df$Function' should have the same values
df
#         V1        V2         V3        V4    Total Function
#1  0.6615353 0.5900620 0.02655674 0.1036002 1.381754 1.381754
#2  0.8471900 0.8927228 0.77014101 0.6379024 3.147956 3.147956
#3  0.8783624 0.6769206 0.09598907 0.6681616 2.319434 2.319434
#4  0.7845933 0.8992605 0.13271067 0.3691835 2.185748 2.185748
#5  0.9753706 0.1374564 0.12631014 0.3693808 1.608518 1.608518
#6  0.4229039 0.7590963 0.79936058 0.2674258 2.248787 2.248787
#7  0.2635403 0.6454591 0.98748926 0.5888263 2.485315 2.485315
#8  0.7008617 0.7505975 0.39355439 0.5943362 2.439350 2.439350
#9  0.1169755 0.1961099 0.88216054 0.3383819 1.533628 1.533628
#10 0.3298974 0.0110522 0.88460835 0.3700531 1.595611 1.595611

【讨论】:

你也可以使用colSums(df) @Jilber 在这个例子中是的,但是 OP 有一个未定义的“函数”,它获取所有值并吐出一个值。尚不清楚该函数是否是简单的求和,因此是我的第二个示例。 我不确定我是否完全明白你在说什么。我了解 apply 函数的基础知识,但我不确定在我的情况下将使用的语法。从我在您的示例中可以看到,您创建了一个函数(x),它采用一个参数,即 4 列的总和。如何将其转换为我有预定义 UDF 并需要传递多个参数的情况? @SimonO101 我的函数不是简单的求和 @user2336618 我知道这不是一个简单的总和。该函数采用单个参数,而不是单个参数。参数是 x`,x 是该行的所有值。在第一个示例中,我们对行中的所有值使用预定义函数sum。但你可以制作自己的功能。因此,在您的情况下,x[1] 将是第一列中的值,x[2] 是第二列值,直到 x[8] 是第 8 列中的值。这有意义吗?

以上是关于使用 R 中的多参数用户定义函数将列添加到数据框中的主要内容,如果未能解决你的问题,请参考以下文章

将列添加到数据框中,测试其他列中的分类变量

将列添加到由python中的for循环计算的数据框中

R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量将异常离散编码转化为NA值

将列中的唯一值分隔到同一数据框中的单独列中

将列中的所有值复制到熊猫数据框中的新列

Dask数据框中的多个聚合用户定义函数