【问题标题】:how to use append()'s after= parameter to insert a dataframe into a specific position in a list of dataframes?如何使用 append() 的 after= 参数将数据框插入数据框列表中的特定位置?
【发布时间】:2020-10-21 07:04:31
【问题描述】:

假设我下载了一个名为econ_dmg.csv的数据集

fileUrl <- "https://raw.githubusercontent.com/MichaelSodeke/DataSets/main/econ_dmg.csv"
download.file(fileUrl, destfile="econ_dmg.csv", method = "curl", mode="wb")
df <- read_csv("econ_dmg.csv") 

然后我将元素分组:

df2 <- df %>% group_by(state, max.net.loss)

接下来我转换为一个列表:

df3 <- group_split(df2)

假设我想在这个列表中添加一个随机数据框:

newDF <- data.frame(state=c("UT", "UT"), evtype=c("FLASH FLOOD", "WINTER STORM"), max.net.loss=c(900, 900))
newDF <- as_tibble(newDF)

然后假设我想在列表df3 中添加它子集df3[[20]] 之后。我尝试了以下方法,但失败了:

df3 <- append(list(newDF), df3, after=df3[[20]][[3]])

请解释我在append() 函数中使用after= 参数时做错了什么。

非常感谢。

【问题讨论】:

  • @akrun 你能演示一下吗。我不明白。
  • 对不起,我没有阅读您数据中 group_split 的部分。你需要this
  • @akrun 我已经审查了该解决方案。但该解决方案仅在元素为整数/数字类型时才有效。我列表中的元素是数据框。你运行代码了吗?
  • 我对你的代码有点困惑,因为after 给出的是df3[[20]][[3]]#[1] 5000 而'df3' 的length 是72
  • @akrun df3[[20]] 引用列表中的特定位置,返回该位置的元素。 df3[[20]][[3]] 指的是该数据框元素在该位置的第 3 列。我想在位置 df3[[20]] 之后放置newDF

标签: r


【解决方案1】:

如果我们需要向数据添加新行,请在 list 的特定位置使用 rbind from base R,方法是提取元素 [[ 并在同一列表元素上更新 (&lt;-)

df3[[20]] <- rbind(df3[[20]], newDF)

【讨论】:

    【解决方案2】:

    我解决了我自己的问题@Akrun。非常感谢。

    假设我使用:

    df3[[20]] <- bind_rows(df3[[20]], newDF)
    

    然后我用 do.call 取消分组

    df4 <- do.call(rbind, df3) %>% as.data.frame()
    

    然后按降序重新排序:

    df5 <- df4[order(df4$max.net.loss, decreasing=TRUE),]
    

    【讨论】:

      猜你喜欢
      • 2020-04-17
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      相关资源
      最近更新 更多