复制data.frame的每一行并指定每行的复制次数?

2024-01-23

我在 R 中编程,遇到以下问题:

我有一个数据字符串 jb,它很长。这是它的一个简单版本:

jb:    a     b     frequency               jb.expanded: a    b   
       5     3        2                                 5    3
       5     7        1                                 5    3
       9     1        40                                5    7
       12    4        5                                 9    1
       12    5        13                                9    1
                                                        ...  ...   

我想复制行,复制的频率就是列频率。这意味着,第一行被复制两次,第二行被复制一次,依此类推。我已经用代码解决了这个问题

jb.expanded <- jb[rep(row.names(jb), jb$freqency), 1:2] 

现在问题来了:

每当频率角中的任何数字大于 10 时,复制列的数量就是错误的。例如:

Frequency: 43 --> 14 columns
           40 --> 13 columns
           13 --> 11 columns
           14 --> 12 columns

你能帮助我吗?我不知道如何解决这个问题,我也在互联网上找不到任何内容。

感谢您的帮助!


Update

重新审视这个问题后,我有一种感觉@Codoremifa 的假设是正确的,即您的“频率”列可能是factor.

如果是这种情况,这里有一个例子。它与您的实际数据不匹配,因为我不知道您的数据集中还有哪些其他级别。

mydf$F2 <- factor(as.character(mydf$frequency))
## expandRows(mydf, "F2")
mydf[rep(rownames(mydf), mydf$F2), ]
#      a b frequency F2
# 1    5 3         2  2
# 1.1  5 3         2  2
# 1.2  5 3         2  2
# 2    5 7         1  1
# 3    9 1        40 40
# 3.1  9 1        40 40
# 3.2  9 1        40 40
# 3.3  9 1        40 40
# 4   12 4         5  5
# 4.1 12 4         5  5
# 4.2 12 4         5  5
# 4.3 12 4         5  5
# 4.4 12 4         5  5
# 5   12 5        13 13
# 5.1 12 5        13 13

嗯。对我来说,这看起来不像 61 行。为什么不?因为rep使用底层的数值factor,在这种情况下与显示的值有很大不同:

as.numeric(mydf$F2)
# [1] 3 1 4 5 2

要正确转换它,您需要:

as.numeric(as.character(mydf$F2))
# [1]  2  1 40  5 13

原答案

不久前,我写了一个函数,它是 @Simono101 答案的概括。该函数如下所示:

expandRows <- function(dataset, count, count.is.col = TRUE) {
  if (!isTRUE(count.is.col)) {
    if (length(count) == 1) {
      dataset[rep(rownames(dataset), each = count), ]
    } else {
      if (length(count) != nrow(dataset)) {
        stop("Expand vector does not match number of rows in data.frame")
      }
      dataset[rep(rownames(dataset), count), ]
    }
  } else {
    dataset[rep(rownames(dataset), dataset[[count]]), 
            setdiff(names(dataset), names(dataset[count]))]
  }
}

出于您的目的,您可以使用expandRows(mydf, "frequency")

head(expandRows(mydf, "frequency"))
#     a b
# 1   5 3
# 1.1 5 3
# 2   5 7
# 3   9 1
# 3.1 9 1
# 3.2 9 1   

其他选项是将每行重复相同的次数:

expandRows(mydf, 2, count.is.col=FALSE)
#      a b frequency
# 1    5 3         2
# 1.1  5 3         2
# 2    5 7         1
# 2.1  5 7         1
# 3    9 1        40
# 3.1  9 1        40
# 4   12 4         5
# 4.1 12 4         5
# 5   12 5        13
# 5.1 12 5        13

或者指定每行重复次数的向量。

expandRows(mydf, c(1, 2, 1, 0, 2), count.is.col=FALSE)
#      a b frequency
# 1    5 3         2
# 2    5 7         1
# 2.1  5 7         1
# 3    9 1        40
# 5   12 5        13
# 5.1 12 5        13

注意需要的count.is.col = FALSE最后两个选项的争论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

复制data.frame的每一行并指定每行的复制次数? 的相关文章

  • 如何在 R 中将 dd/mm/yy 转换为 yyyy-mm-dd

    我有一个向量 其日期值采用这种格式 dd mm yy 例如 27 06 16 我想将其转换为 yyyy mm dd 格式 例如 2016 06 27 以进行逻辑比较 我正在使用这个表达 as Date as character 27 06
  • 对 git Push 运行单元测试,对 Pull 请求运行集成测试

    在构建 R 包时 我们使用 testthat 来编写测试 我们有 2 个文件 特定包的测试文件 特异性R 我们用它来确保所有包继续一起工作并且总体结果良好 整体R 当前 当我们推送到 github 或通过 Travis 创建 PR 时 都会
  • 在 grid.text 中使用 pch 字符

    我使用 ggplot2 创建了一个图表 现在我想让图例不在图表上 而是在图表外的网格中 我现在的问题是 是否有人知道是否有可能在 grid text 中使用 pch 符号 Here is an image to show what I wa
  • 将行从 0 折叠到 0

    对于这样的数据集 Incident ID date product INCFI0000029582 2014 09 25 08 39 45 foo INCFI0000029582 2014 09 25 08 39 48 bar INCFI0
  • 如何在 R 或 MATLAB 中为散点图创建阴影误差条“框”

    我想在 R 或 MATLAB 中创建一个简单的散点图 涉及两个变量 x 和 y 它们有与之相关的错误 epsilon x 和 epsilon y 然而 我不是添加误差线 而是希望在每个 x y 对周围创建一个 阴影框 其中框的高度范围从 y
  • 配置失败,因为找不到 libcurl

    我正在尝试使用从远程服务器提取一些 json 数据fromJSON gt server lt http 111 111 000 00 3000 gt streams lt fromJSON paste server output strea
  • 匹配较大向量中的序列

    我想要一个函数 它返回向量的匹配子序列的初始索引 例如 y lt c a a a b c multi match c a a y 1 1 2 multi match c a b y 1 3 我有一个粗略的实现 但我觉得我必须重新发明轮子 而
  • R:函数中使用的 ggplot2 未反映字体大小变量的变化

    我经常需要将多个不同大小的相同 ggplot2 图表输出到 png 文件 通过使用输出高度和宽度 以像素为单位 的变量 可以轻松生成每个 png 文件的大小 对于 ggplot2 部分 我使用字体大小和某些其他元素的变量 并设置一个简单的循
  • 如何使用电子表格中的第一行作为 Dataframe 列名称而不是 0 1 2...等?

    我希望我的数据框将第一行名称显示为数据框列名称 而不是从 0 等编号 我该如何执行此操作 我尝试使用 pandas 和 openpyxl 模块将我的 Excel 电子表格转换为数据框 import pandas as pd from ope
  • 将箱线图与 Wilcoxon 检验进行比较

    我正在使用 R 中的 ggplot2 包比较两组长度 不同的个体 和箱线图 我想比较这两个分布 但到目前为止我发现使用 wilcoxon 测试的唯一方法是 ggpubr 包中的 stat compare means 这是比较分布的正确方法吗
  • 如何使用 grid.arrange 排列绘图的变量列表?

    library ggplot2 df lt data frame x 1 10 y rnorm 10 p1 lt ggplot df aes x y geom point plist lt list p1 p1 p1 p1 p1 In my
  • 在汇总表中添加一列,其中包含每个变量的分布图

    有没有一种好方法来添加包含每个变量的分布图的列 例如这里 library vtable st iris 没有必要使用这个包 接受建议 尽管我知道这可能更容易做到ggplot 我总是渴望看看我是否可以达到类似的结果base R绘图工具 我将利
  • 如何重置 pandas 数据框中的索引? [复制]

    这个问题在这里已经有答案了 我有一个数据框 从中删除了一些行 结果 我得到一个数据帧 其中索引是这样的 1 5 6 10 11 我想将其重置为 0 1 2 3 4 我该怎么做 以下似乎有效 df df reset index del df
  • 删除单元格中的重复条目 - R

    我在这里到处搜索 并尝试了重复和独特的功能来解决我要问的问题 但没有任何效果 假设我有一个名为 company 的数据框 其状态可变 当我折叠行时 我在状态变量观察之一中留下以下输出 PA PA PA TX TX 我怎样才能删除单元格内的重
  • 如何创建一个包含滚动桶集中数据计数的集合

    我有一个月的流量的服务器日志 下面是部分示例 UploadDateGMT UserFileSize TotalBusinessUnits 2012 01 01 00 00 38 1223 1 2012 01 01 00 01 16 1302
  • 每个 id 创建 n 行 |熊猫

    我有一个数据框df如下 id lob addr addr2 a1 001 1234 0 a1 001 1233 0 a3 003 1221 0 a4 009 1234 0 我想生成n 让我们每个 id 取 4 行 其他列是null na n
  • 添加一个新列,其中标签附加到新月形数字

    我想添加一个新列 给出一个常量标签 并逐行附加新月数字逻辑 我的输入 position work chr1 jil2001 chr4 jil2001 chr3 kou2009 chr9 nai2012 chr7 fandis2005 我的预
  • 在 Shiny 的压缩文件夹中下载多个 csv 文件

    有人可以指出我如何使这个下载 zip 功能在 server R 中工作吗 当我运行这个时 我收到以下错误 1 var folders 00 1dk1r000h01000cxqpysvccm005p87 T Rtmps3T6Ua write
  • 时间序列数据 - 如何[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑进行一项为期一个月的研究 受试者记录他的饮酒量和排尿频率 我想让受试者每天记录这些活动 这样我就有一个月的数据 每天的排尿次
  • 从另一个项目调用项目脚本

    我正在构建一个 RStudio 项目 项目 2 我想在其中访问另一个已构建的 RStudio 项目 项目 1 中包含的某些脚本 项目 1 包含各种脚本 其中一些脚本通过source 来电 有什么办法可以实现这一点吗 我最初认为在项目 1 中

随机推荐