【发布时间】:2020-12-13 11:50:24
【问题描述】:
我正在尝试创建一个函数来操作不同的数据集,但我面临着这个任务的几个问题。我在下面的 dput() 输出中提供了我试图操作的数据的简化版本:
structure(list(id = structure(c(2, 4, 6, 8, 10), label = "iid", format.spss = "F4.0", display_width = 0L), A = c(13, 9, 14, 14, 13), B = c(12, 0, 9, 3, 10), C = c(13, 8, 14, 13, 11)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))
我正在尝试做几件事,但由于数据的格式化方式,我在不同的时刻卡住了。首先,我需要将每一行的 A:D 列的值汇总到一个名为 total 的变量中。接下来,我需要通过将每一列 A:D 除以 total 来计算概率。
这是我面临一些问题的地方。我写了一个函数来执行上述操作:
functa <- function(x, id, vars) {
x %>%
mutate(total = rowSums(.[vars])) %>%
mutate(prob = .[vars]/total)
}
当我使用以下行调用函数时:
test <- functa(df_ED, "pid", c("A", "B", "C", "D"))
我得到一个有 5 个观察值的对象,但只有 7 个变量(而不是 10 个)。当我检查对象时,我看到了 4 个新变量(即 prob.A、prob.B、prob.C、prob.D),但它们被作为单个变量读入。
因此,我想对此数据集执行的任何后续操作都无法按预期进行。在过去的两天里,我一直在研究这个问题,但找不到任何关于这种现象的信息,我猜我想不通。
我使用此功能的最终目标是:
- 计算一个
total变量(A:D 的总和) - 计算应输出 4 个变量(即 A/total、B/total 等)的
prob变量 - 重新编码
prob变量,以便将所有无穷大值(即“Inf”)重新编码为 0 - 将所有 4 个
prob变量加到一个totalprob变量中
希望对此有任何见解!
【问题讨论】: