R 当满足条件时,将函数应用于数据集中的每一行
我有一个布尔变量(parent_boolean)。如果parent\u boolean=True,那么我想对表\u name应用一个函数,如果parent\u boolean=False,那么我想对数据集中的表\u name应用一个不同的函数。在DPLYR中最简单的方法是什么R 当满足条件时,将函数应用于数据集中的每一行,r,dplyr,R,Dplyr,我有一个布尔变量(parent_boolean)。如果parent\u boolean=True,那么我想对表\u name应用一个函数,如果parent\u boolean=False,那么我想对数据集中的表\u name应用一个不同的函数。在DPLYR中最简单的方法是什么 table_name parent_table parent_boolean column_count <chr>
table_name parent_table parent_boolean column_count
<chr> <chr> <lgl> <dbl>
1 table_1 table_1 TRUE 1
2 table_2 table_1 FALSE 3
dp_child <- function(table_name, parent_table) { function runs SQL statement against database)
dp_parent <- function(table_name) {function runs SQL statement against database)
table\u name parent\u table parent\u boolean column\u count
1表1表1真1
2表2表1假3
dp_child在使用mutate
创建新列时,您可以在中使用ifelse
:
A在使用mutate
创建新列时,可以在中使用ifelse
:
A这里是一个使用ifelse()
的基本R解决方案,其中玩具示例如下所示
# two distinct function
f1 <- function(x) x**2
f2 <- function(x) -sqrt(x)
# apply function to column B according to value in column A
df <- data.frame(A = c(T,T,F,T),B = 1:4)
df <- within(df, C <- ifelse(A,f1(B),f2(B)))
编辑
有了文章中的数据框,也许你可以试试下面的代码
result <- apply(df, 1, function(v) {
if (v["parent_boolean"]) {
dp_parent(v["table_name"])
} else {
dp_child(v["table_name"],v["parent_table"])
}
})
df <- cbind(df,result)
## or
# add_column(df, result)
result这里是一个使用ifelse()
的基本R解决方案,其中给出了一个玩具示例,如下所示
# two distinct function
f1 <- function(x) x**2
f2 <- function(x) -sqrt(x)
# apply function to column B according to value in column A
df <- data.frame(A = c(T,T,F,T),B = 1:4)
df <- within(df, C <- ifelse(A,f1(B),f2(B)))
编辑
有了文章中的数据框,也许你可以试试下面的代码
result <- apply(df, 1, function(v) {
if (v["parent_boolean"]) {
dp_parent(v["table_name"])
} else {
dp_child(v["table_name"],v["parent_table"])
}
})
df <- cbind(df,result)
## or
# add_column(df, result)
结果您能提供最小可再现性数据吗?您能提供最小可再现性数据吗?我得到以下错误:错误:true
必须是长度1(条件的长度
),而不是2@Onyambu,你说得对,它也可以工作,但我的观点是要明确使用ifelse
语句,以防OP是R中的初学者。即使是初学者,也不能说TRUE==TRUE
这不好。我得到了这个错误:TRUE
必须是长度1(长度条件
),而不是2@Onyambu,你说得对,它也可以工作,但我的观点是要明确使用ifelse
语句,以防OP是R中的初学者。即使是初学者,也不能说TRUE==TRUE
这不好。我得到了这个错误:TRUE
必须是长度1(条件的长度
),不2@mrichey我更新了我的答案,所以如果可以的话你可以试试。谢谢!对于每一行,输出似乎是一个单独的tible:row_计数。有没有办法解决这个问题column@mrichey,使用cbind(df,result)
或添加列(df,result)
如何?在回答中查看我的更新谢谢你的帮助!我收到此错误:错误:true
必须是长度1(条件的长度),而不是2@mrichey我更新了我的答案,所以如果可以的话你可以试试。谢谢!对于每一行,输出似乎是一个单独的tible:row_计数。有没有办法解决这个问题column@mrichey,使用cbind(df,result)
或添加列(df,result)
如何?在回答中查看我的更新谢谢你的帮助!