【问题标题】:Subset a new dataframe that changes minuses the summed values of three dataframes from a fourth子集一个新的数据帧,从第四个数据帧中减去三个数据帧的总和值
【发布时间】:2022-07-21 23:16:08
【问题描述】:

我有以下结构的四个数据框:

df1 <- data.frame(c("2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06"), c(1002, 1200, 1111, 2211, 1112, 1621), c("A", "B", "C", "D", "E", "F"))
names(df1) <- c('date', 'value', 'type')
df2 <- data.frame(c("2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06"), c(401, 222, 967, 111, 982, 120), c("A", "B", "C", "D", "E", "F"))
names(df2) <- c('date', 'value', 'type')
df3 <- data.frame(c("2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06"), c(214, 151, 272, 295, 102, 211), c("A", "B", "C", "D", "E", "F"))
names(df3) <- c('date', 'value', 'type')
df4 <- data.frame(c("2021-01-01", "2021-01-02", "2021-01-03", "2021-01-04", "2021-01-05", "2021-01-06"), c(107, 751, 614, 527, 125, 111), c("A", "B", "C", "D", "E", "F"))
names(df4) <- c('date', 'value', 'type')

我想创建 df1 的子集(保留日期,但将类型替换为“Z”),并且值从每日值中减去 df2、df3 和 df4 中的总和值(每天)在df1中。所以 2021-01-01 的值是:280。

我试过的代码是:

new_df <- df1 %>% df1&values-sum(df2$values, df3$values, df4$values)

然而,遗憾的是,这会返回“3 个参数传递给 '$',需要 2 个”错误,因此无法继续为新的 df 重命名类型。

任何帮助将不胜感激。

【问题讨论】:

  • 提防错别字df1&amp;values = df1$values,列名为value 而不是values

标签: r dataframe


【解决方案1】:

你可以这样做:

new_df <- df1
new_df$type <- "Z"
new_df$value <- df1$value - df2$value - df3$value - df4$value

输出:

        date value type
1 2021-01-01   280    Z
2 2021-01-02    76    Z
3 2021-01-03  -742    Z
4 2021-01-04  1278    Z
5 2021-01-05   -97    Z
6 2021-01-06  1179    Z

【讨论】:

    【解决方案2】:

    如果我们有许多对象名称具有相同模式的数据集(df 后跟一个或多个数字 (\\d+),请将它们加载到带有 mgetlist 中,提取“值”列并使用-Reduce

    new_df <- df1
    new_df$value <- Reduce(`-`, lapply(mget(ls(pattern = "^df\\d+$")), "[[", "value"))
    

    -输出

    > new_df
            date value type
    1 2021-01-01   280    A
    2 2021-01-02    76    B
    3 2021-01-03  -742    C
    4 2021-01-04  1278    D
    5 2021-01-05   -97    E
    6 2021-01-06  1179    F
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多