【发布时间】:2021-07-28 15:33:03
【问题描述】:
我有一个如下的数据框:
id <- c(1, 2, 3, 4, 5)
week1 <- c(234,567456, 134123, 13412421, 2345245)
week2 <- c(4234,5123456, 454123, 12342421, 8394545)
week3 <- c(1234, 234124, 12348, 9348522, 134534)
data <- data.frame(id, week1, week2, week3)
我想找到第 1 周和第 2 周之间的百分比变化,然后是第 2 周和第 3 周等(我的数据框要大得多,大约有 27 列)。
我试过了:
data$change1 <- (data$week2-data$week1)*100/data$week1
但是,对于更大的数据集,这将是广泛的。
【问题讨论】:
-
数学运算符在 R 中有
data.frames 的方法;(data[-(1:2)] - data[-c(1, ncol(data))]) * 100 / data[-c(1, ncol(data))] -
当我在更大的数据集上尝试此操作时,我收到一条错误消息,指出
Error in Ops.data.frame(table_names[-(1:7)], table_names[-c(1, 27)]) : ‘-’ only defined for equally-sized data frames关于为什么会发生这种情况的任何建议?我的 df 是 12714 行乘 27 列 -
我正在尝试查找从第 7 列到第 27 列(结束)的百分比变化
-
在您的第一个子集 (
table_names[-(1:7)]) 中,您删除所有非数据列 (1:6) 和第一个数据列 (7)。在第二个子集 (table_names[-c(1, 27)]) 中,您只删除第一列和最后一列。因此,这两个子集具有不同的列数,因此(信息性)消息:“-仅为相同大小的数据帧定义”。您需要调整第二个子集,以便删除最后一列和 all 非数据列。我把它留给你。干杯 -
@JaneMiller 如果下面的答案有帮助,请接受答案,这样它就不会再显示为未回答,如果您认为它有帮助,您甚至可以投票。如果它没有回答您的查询,请随时解释剩余的问题。您可能希望对您提出的任何其他已回答的问题执行相同的操作。
标签: r function dplyr difference