gpt4 book ai didi

r - 如何在 R 中编写有条件运行并包含其他函数的函数

转载 作者:行者123 更新时间:2023-12-02 03:13:44 25 4
gpt4 key购买 nike

我正在尝试在 R 中编写一个函数,它可以同时完成几件事,我认为该函数必须采用两个数据帧才能工作。

previous question 中,我询问了如何将数据框中的行添加到另一个。正如其中一个答案所提供的,我最终使用这段代码来做到这一点:

MissingFromC1 <- anti_join(C2, C1, by = c("HW", "Var"))
MissingFromC1$Freq <- 0
All_c1 <- full_join(C1, MissingFr1, by = c("HW", "Var", "Freq"))

其中 C1 和 C2 是由三列组成的两个数据帧:HW、Var 和 Freq。每个 HW 都有几个不同频率的 Var。它们看起来像这样:

            C1                                               C2    
Headword Spelling Freq Headword Spelling Freq
Word1 Sp1a x Word1 Sp1a x
Word1 Sp1b x Word1 Sp1c x
Word1 Sp1d x Word2 Sp2a x
Word2 Sp2a x Word2 Sp2b x
Word3 Sp1a x

C1 和 C2 不同 - 每个都包含另一个不存在的 HW 和 Var。我想确保两者的长度相同,因此上面的代码添加了从 C2 到 C1 的缺失行(然后我再次运行它,但在另一个数据帧上运行)。

我现在要做的是把它变成一个函数。但是有一个变化 - 我只想加入硬件中缺少 Var 的行。我不想向 C1 或 C2 添加新的硬件,只是缺少 Var。事实上,例如,如果硬件在 C1 而不是 C2,那么我希望它被过滤掉——即在上面的例子中,Word3 在 C1 但 C2 中根本没有 Word3 Vars,所以我会喜欢它完全过滤掉。 (我想比较每个 HW 的 Var 比率,但如果我有任何由 Var 组成且 Freq = 0 的 HW,这将不起作用)。我希望这是有道理的!

我着手为它编写代码,只是为了尝试展示我正在尝试做的事情(我意识到这段代码是非常错误的!我只是认为它可能会有所帮助)。

add.missing.to.df1 <- function(df1, df2) {
if(is.element(df2$HW, df1$HW)))
missing.val <- anti_join(df2, df1, by = c("HW", "Var"))
missing.val$Fr <- 0
All_df2 <- full_join(df1, miss.val, by = c("HW", "Var", "Fr"))
df2_fin <- filter(All_df2, if(!is.element(df2$HW, df1$HW)))
}

所以最后,我想要两个数据框。每一个都包含在两个 数据帧中至少有一个 Var 的 HW。如果 HW 在 C1 而不是 C2(反之亦然),那么我想将其过滤掉。

是否可以做到这一切?是否有可能将其全部绑定(bind)到一个函数中?如果是,怎么办?

感谢任何能提供帮助的人!

最佳答案

正如我们在评论中所讨论的那样,dplyr::inner_join() 似乎可以满足您的需求。来自文档:

inner_join return all rows from x where there are matching values in y, and all columns from x and y. If there are multiple matches between x and y, all combination of the matches are returned.

因此,您可以尝试使用您的数据:

library("dplyr")
df <- inner_join(C1, C2, by = c("Headword", "Spelling"))
df
# Headword Spelling Freq.x Freq.y
# 1 Word1 Sp1a 1 1
# 2 Word2 Sp2a 4 3

至于你原来关于在一个函数中调用两个数据框的问题,这只是通过以下方式完成的:

my_function <- function(df1, df2, ...) {
# do some stuff here
}

然后调用 my_function(df1, df2)

关于r - 如何在 R 中编写有条件运行并包含其他函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38304576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com