R:具有重复数据框的扩展函数

2023-12-04

我有一个需要旋转的数据框,但该数据框有重复的标识符,所以spread函数给出错误Error: Duplicate identifiers for rows (5, 6)

Dimension = c("A","A","B","B","A","A")   
Date = c("Mon","Tue","Mon","Wed","Fri","Fri")    
Metric = c(23,25,7,9,7,8)
df = data.frame(Dimension,Date,Metric)
df

  Dimension Date Metric
1         A  Mon     23
2         A  Tue     25
3         B  Mon      7
4         B  Wed      9
5         A  Fri      7
6         A  Fri      8

library(tidyr)
df1 = spread(df, Date, Metric, fill = " ")

Error: Duplicate identifiers for rows (5, 6)

然后我合并行并粘贴Metric:

dfa = aggregate(df[3], df[-3], 
                FUN = function(X) paste(unique(X), collapse=", "))

  Dimension Date Metric
1         A  Fri   7, 8
2         A  Mon     23
3         B  Mon      7
4         A  Tue     25
5         B  Wed      9

然后重复,当然现在就可以了:

df1 = spread(dfa, Date, Metric, fill = " ")
df1
  Dimension  Fri Mon Tue Wed
1         A 7, 8  23  25    
2         B        7       9

问题:有没有一种“更简单”的方法可以做到这一点,或者我上面的方法是否足够有效,所以我不需要为此失眠?谢谢!

编辑。 所有代码 - 我的和 2 个 akrun 的代码都可以很好地处理这个小数据集。然而,阿克伦的dplyr版本破坏了我的真实数据集。这是dput.

structure(list(Dimension = c(10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 10994030020, 10994030020, 10994030020, 10994030020, 
10994030020, 12300245685, 12300245685, 12300245685, 12300245685, 
12300245685, 12300245685, 12300245685, 12300245685, 12300245685, 
12300245685, 12300245685, 12300245685, 12300245685, 12300245685, 
12300245685, 12300245685, 12300245685, 12300245685, 12300245685, 
12300245685, 12300245685, 12300245685, 12300245685, 12300245685, 
12300245685, 12300245685, 12300245685, 12300245685, 12300245685, 
12300245685, 12300245685, 12300245685, 12300245685, 12300245685, 
12303485675, 12303485675, 12303485675, 12303485675, 12303485675, 
12701670437, 12701670437, 12701670437, 12701670437, 12701670437, 
12701670437, 12701670437, 12701670437, 12701670437, 12701670437, 
12701670437, 12701670437, 12701670437, 12701670437, 12701670437, 
12701670437), Date = structure(c(1L, 3L, 5L, 7L, 9L, 10L, 11L, 
12L, 13L, 14L, 16L, 18L, 19L, 20L, 22L, 23L, 24L, 26L, 27L, 28L, 
30L, 32L, 33L, 34L, 40L, 41L, 42L, 47L, 48L, 49L, 51L, 52L, 53L, 
54L, 55L, 58L, 59L, 60L, 61L, 62L, 63L, 65L, 66L, 68L, 69L, 70L, 
74L, 75L, 76L, 2L, 3L, 5L, 7L, 8L, 10L, 11L, 15L, 17L, 20L, 21L, 
24L, 25L, 28L, 30L, 31L, 34L, 36L, 42L, 43L, 46L, 48L, 49L, 53L, 
54L, 56L, 65L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 7L, 24L, 30L, 
38L, 65L, 4L, 6L, 7L, 24L, 28L, 29L, 30L, 35L, 37L, 39L, 44L, 
45L, 50L, 57L, 64L, 65L), .Label = c("16", "analog tuner", "aspect ratio", 
"assembled in country of origin", "backlight technology", "battery type", 
"brand", "brightness", "color class", "component video", "composite video", 
"country of origin", "depth w/ stand", "digital audio output", 
"digital tuner", "display technology", "features", "green compliance certificate/authority", 
"green compliant", "hdmi", "headphone jack", "height w/ stand", 
"limited warranty", "manufacturer", "maximum resolution", "media player", 
"motion interpolation technology", "mpn", "multi pack indicator", 
"name", "native contrast ratio", "number of hdmi ports", "number of usb ports", 
"operating power consumption", "origin of components", "package contents", 
"primary color", "product dimensions", "product in in (l x w x h)", 
"product model", "product series", "product type", "remote control incl", 
"remote included", "resolution", "response time", "rms output power", 
"scan format", "screen size", "shipping weight (in lb)", "sound system", 
"speaker output power (w)", "speakers", "standard refresh rate", 
"standby power consumption", "total number of hdmi ports", "tv definition", 
"tv features", "tv refresh rate (hz)", "tv resolution", "tv screen size (in)", 
"tv screen size range", "tv speakers", "tv technology", "unspsc", 
"usb", "vertical viewing angle", "vesa mount standard", "vga", 
"video signal standard", "viewing angle", "warranty length", 
"wattage", "weight (approx)", "weight w/ stand (approx)", "width w/ stand"
), class = "factor"), Metric = structure(c(40L, 13L, 57L, 69L, 
43L, 72L, 72L, 45L, 38L, 72L, 55L, 44L, 72L, 72L, 15L, 3L, 69L, 
72L, 46L, 26L, 70L, 27L, 1L, 29L, 26L, 54L, 58L, 12L, 39L, 25L, 
42L, 11L, 72L, 37L, 28L, 52L, 36L, 39L, 24L, 19L, 72L, 33L, 72L, 
18L, 72L, 49L, 6L, 10L, 23L, 62L, 13L, 48L, 64L, 31L, 72L, 72L, 
41L, 66L, 72L, 72L, 64L, 16L, 63L, 65L, 4L, 32L, 21L, 58L, 71L, 
35L, 8L, 20L, 72L, 37L, 17L, 33L, 14L, 7L, 72L, 50L, 14L, 2L, 
34L, 59L, 59L, 60L, 5L, 33L, 51L, 47L, 67L, 67L, 53L, 61L, 68L, 
51L, 43L, 30L, 72L, 9L, 22L, 49L, 56L, 33L), .Label = c("1", 
"1-year limited", "1 Year", "1,000:1", "1,140 x 145 x 705 in ; 65.6 lb", 
"10.40 lb", "100 x 100", "1080p", "1080p (HDTV)", "11.20 lb", 
"14", "14 W", "16:9", "178 degrees", "18.30 in", "1920 x 1080", 
"2", "200 x 100", "21", "22 in", "22 in FHD LED TV; Remote Control", 
"25.4", "26.20 in", "29", "29 in", "29L1350U", "3", "300 mW", 
"33.80 W", "36.5 x 6.5 x 23.0", "365 Nit", "50 W", "52161505", 
"6 W", "6.50 ms", "60", "60 Hz", "7.10 in", "720p", "9", "ATSC", 
"Audyssey EQ", "Black", "CEC", "China", "ClearScan 120 Hz", "Does Not Contain a Battery", 
"Edge LED", "HDTV", "HDTV 1080p", "Imported", "Internet Apps", 
"KDL40W600B", "L1350U", "LCD", "LCD, Internet Connected, LED", 
"LED", "LED-LCD TV", "LG", "LG 47LY340C - 47 in - commercial use LED-backlit L", 
"No", "NTSC", "PLED2243A", "ProScan", "PROSCAN PLED2243A 22 in 1080p 60 Hz LED HDTV - PTR", 
"Sleep Timer; Auto Program", "Sony", "Sony KDL40W600B 40 in 1080p 60 Hz Smart LED TV (20", 
"Toshiba", "Toshiba 29L1350U 29 in 720p LED-LCD TV - 16:9 - HD", 
"yes", "Yes"), class = "factor")), .Names = c("Dimension", "Date", 
"Metric"), class = c("data.table", "data.frame"), row.names = c(NA, 
-104L), .internal.selfref = <pointer: 0x00000000003d0788>)

你可以使用dcast从开发版本data.table ie. v1.9.5。安装说明是here

library(data.table)#v1.9.5+
dcast(setDT(df), Dimension~Date, value.var='Metric', 
               fun.aggregate=function(x) toString(unique(x)))
#   Dimension  Fri Mon Tue Wed
#1:         A 7, 8  23  25    
#2:         B        7       9

Or

library(dplyr)
library(tidyr)
df %>%
   group_by(Dimension, Date) %>% 
   summarise(Metric=toString(unique(Metric))) %>% 
   spread(Date, Metric, fill='')
#   Dimension  Fri Mon Tue Wed
#1         A 7, 8  23  25    
#2         B        7       9

Update

使用“OP”帖子中的新数据集

 setDF(df2)
 df2 %>% 
     group_by(Dimension, Date) %>% 
     summarise(Metric=toString(unique(Metric))) %>%
     spread(Date, Metric, fill='') %>%
     head(2) %>%
     select(1:3)
 #    Dimension 16 analog tuner
 #1 10994030020  9             
 #2 12300245685            NTSC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:具有重复数据框的扩展函数 的相关文章

  • 如何在 Shiny 中动态渲染的 textInput 添加样式元素

    你好堆栈溢出 在我最近提出的问题中 我已经解决了一些与动态渲染 UI 元素相关的主要问题 并在一些了不起的人的帮助下动态创建了观察者 参见此处 动态渲染的 UI 如何在第二次运行时删除旧的反应变量 https stackoverflow c
  • 在 Linux 下更改 RStudio 用户界面(不是图形等)中的字体大小

    This is not关于更改使用 RStudio 生成的图表中的字体大小的问题 我已经知道该怎么做了 我在配备 视网膜 显示屏的 MacBook Pro 上的 Linux 下使用 RStudio 我使用 KDE 作为我的窗口管理器 我可以
  • 根据共同值对两个数据帧求和

    我有一个看起来像的数据框 day of week count 1 0 3 2 3 1 3 4 1 4 5 1 5 6 3 另一个喜欢 day of week count 1 0 17 2 1 6 3 2 1 4 3 1 5 4 5 6 5
  • 在 R Shiny 中显示/隐藏整个框元素

    我目前正在尝试找到一种方法来隐藏 显示 R Shiny 中的整个 box 元素 以及里面的所有内容 我想创建一个可能的按钮 它允许用户展开特定框 然后使用相同 甚至不同 的按钮隐藏它 我不想使用条件面板 因为我的应用程序非常大并且会产生一些
  • 通过 RCpp 返回 NA

    新手 RCpp 问题在这里 How can I make a NumericVector returnNA到R 例如 假设我有一个 RCpp 代码 它分配NA到向量的第一个元素 RCpp export NumericVector myFun
  • 使用 dplyr 的 select 引用变量名[重复]

    这个问题在这里已经有答案了 通常我会想要选择变量的子集 其中该子集是函数的结果 在这个简单的例子中 我首先获取与宽度特征相关的所有变量名称 library dplyr library magrittr data iris width var
  • R Shiny - 使用 DataTable 移动列名称

    我有一个非常复杂的闪亮代码 其中有几个面板和这些面板内的几个表格 启动应用程序时 列名称与列值正确对齐 但是 一旦我更改应用程序表格下的页码 列名称就会移动到左侧 而值仍保留在中间 如何强制应用程序使列名称与列值对齐 一个可重现的例子 li
  • R - 如何为数据范围内的缺失值绘制条形图零点?

    假设我对 1 到 10 之间的整数的 200 个点有 10 个观察值 mysample sample rep seq 1 10 20 10 我想用条形图绘制它 barplot table mysample barplot https i s
  • 在 ggplot2 上绘制世界地图

    我一直在尝试在 ggplot2 上绘制世界地图 我跟踪了电子邮件的线索 带 l 的 ggplot 地图 https stackoverflow com questions 9558040 ggplot map with l但我确实遇到了同样
  • 超过阈值的时间序列值的聚合计数(按年月)

    我现在正在学习 R 并使用 SEAS 包来帮助我在 R 中进行一些计算 并且数据与 SEAS 包喜欢的格式相同 这是一个时间序列 require seas data mscdata dat int lt mksub mscdata id 1
  • 如何更新 R 中的包?

    我想将一个 R 包升级到已经可用的新版本 我试过 update packages c R2jags 但它什么也没做 控制台上没有输出 没有错误 什么也没有 我使用了相同的语法install packages但也许我做错了什么 我一直在看 u
  • 在 Rlattice xyplot 上分别控制轴刻度和轴线

    我怎样才能去除周围的盒子xyplot 同时保留轴刻度刻度线 本着爱德华 塔夫特 Edward Tufte 极简主义数据图形美学的精神 这些轴线是 非数据墨水 并且可以 应该 被 擦除 library lattice my df lt dat
  • 在闪亮应用程序的 DT::datatable 中添加、删除和编辑行

    我有下面闪亮的应用程序 我可以通过按添加新行Add基于闪亮的小部件选择 我可以通过按选择并删除一行Delete我想将它们与单击一行的功能结合起来 然后在按Edit 例如 如果我单击第二行 然后更改Security Type小部件来自Stoc
  • 在 Travis 上使用 devtools 安装 R 包时遇到问题

    Travis CI 构建于drakeR包手册 https github com ropenscilabs drake manual 最近开始失败 https travis ci org ropenscilabs drake manual b
  • 如何在 R 中为所有plot.default、plot 或lines 调用设置默认颜色

    为了简化我的日常 R 交互 我想为所有绘图设置默认颜色 例如 假设我想要用红线绘制所有绘图 例如在 gnuplot 中 到目前为止 这是我的 Rprofile 的片段 setHook packageEvent grDevices onLoa
  • ggplot2 - 在绘图顶部添加辅助 y 轴

    对于出版物 我需要向现有绘图添加第二个 y 轴 我遇到了一种方法来做到这一点 https rpubs com kohske dual axis in ggplot2 https rpubs com kohske dual axis in g
  • 将 12 小时字符时间转换为 24 小时

    我有一个包含字符格式时间的数据集 我试图将其从 12 小时格式转换为 24 小时格式 我做了一些搜索 但我发现的所有内容似乎都假设字符已经采用 24 小时格式 这是我工作时的一个例子 times lt c 9 06 AM 4 42 PM 3
  • 在 R 中,为什么 sum 与其他方法(例如 cumsum)相比如此慢?

    我正在尝试实现一个需要非常快的函数 主要是因为它一遍又一遍地处理巨大的数据帧 R 总是让我感到困惑 为什么它有时有点慢 而有时又慢得离谱 不幸的是 它从来都不快 不管怎样 我一直认为 如果可能的话 当以某种方式推入 apply sapply
  • R:中断 for 循环

    你能确认下一个break是否取消了内部for循环吗 for out in 1 n old id velho lt old table df id out for in in 1 n id novo lt new table df ID in
  • 为什么在 data.frame 中预先指定类型会比较慢?

    我预先分配了一个大 data frame 以便稍后填写 我通常这样做NA是这样的 n lt 1e6 a lt data frame c1 1 n c2 NA c3 NA 我想知道如果我预先指定数据类型是否会让事情变得更快 所以我测试了 f1

随机推荐

  • ValueError:值的长度与索引的长度不匹配 |熊猫 DataFrame.unique()

    我正在尝试获取新的数据集 或将当前数据集列的值更改为其唯一值 这是我想要得到的示例 A B 0 1 1 1 2 5 2 1 5 3 7 9 4 7 9 5 8 9 Wanted Result Not Wanted Result A B A
  • 为什么有些 php 文件不以右括号“?>”结尾? [复制]

    这个问题在这里已经有答案了 我一直在使用 Wordpress 和其他 CMS 我注意到一些 php 文件没有结束语 gt 当我编写自己的文件时 我必须包含 gt 否则软件崩溃 我想知道他们是如何让它工作的 或者主题的特定部分是否接受这种类型
  • 如何知道文件复制完成

    我正在使用 ReadDirectoryChangesW 来监视一个文件夹 如果我将一个大文件复制到该文件夹 我可以收到多个 FILE ACTION MODIFIED 消息 似乎每次 Windows 写入一大块文件时 您都会收到每个文件修改的
  • Microsoft.Identity.Web 和 ASP.NET Core SignalR JWT 身份验证

    我正在使用 ASP NET Core 制作一个 Web 应用程序 该应用程序还使用 SignalR Core 来提供实时功能 我使用 Azure AD B2C 进行用户管理 我已经成功使用了Microsoft Identity Web ht
  • Spring中初始化多个数据库

    我正在使用 AbstractRoutingDatasource 在运行时在数据库之间进行路由 在 informix 数据库的实际情况下 一切工作正常 为了进行测试 我创建了一个 spring 配置文件以在内存 H2 数据库中使用 使用测试配
  • 如何在运行一次后“禁用”javascript函数

    所以我有两个 html 按钮 每个按钮运行不同的功能 两个功能都在下面 基本上 您单击两个按钮之一即可将 Google 地图操作侦听器添加到地图 我已经成功地让它发挥作用了 唯一的问题是我只希望动作监听器一键可用 单击一次之后 我希望用户必
  • if/else 构造内部和外部函数

    当我查看 R 函数时 我经常发现以下结构 f lt function exp T if exp a lt 1 else a lt 2 f f F 这将运行而不会出现错误 但是执行内部函数代码会引发错误 因为 R 可能假设该语句在第一次赋值后
  • iPhone - 保存 UIImageView 状态

    我创建了 UIImageView 的子类 并且正在子类本身内部处理其对象的触摸 现在 当用户即将退出应用程序时 我想保存图像的状态 由于图像上可能发生了多次转换 我将所有转换保存在一个数组中 我希望能够将这些对象保存在 applicatio
  • 导致 TFS InvokeProcess 构建活动在其他凭据下运行

    我们使用 InvokeProcess 操作自定义了构建过程 该操作运行部署 sln 的 powershell 脚本 问题是该脚本必须在给定用户 而不是 tfsbuild 用户 下运行 我们怎样才能做到这一点 替代方案 1 创建 Invoke
  • [].append(x) 行为

    这按照我的预期执行 gt gt gt x gt gt gt x append 3 gt gt gt x 3 为什么以下返回 None gt gt gt x append 3 gt gt gt x gt gt gt because list
  • openCV 中的结果比较Hist

    我正在尝试比较我存储为数组的两个直方图 我是 C 接口 cv Mat 和 OpenCV 中计算直方图的新手 My code int testArr1 4 12 10 11 11 int testArr2 4 12 0 11 0 cv Mat
  • 在 C# 中使用 POST/httpwebrequest 上传 zip 文件

    我正在尝试代码http www paraesthesia com archive 2009 12 16 posting multipartform data using net webrequest aspx通过 httpwebreques
  • 如何在超级账本结构中获取资产修改历史记录

    我在用IBM Bluemix 区块链服务为我的资产共享演示尝试一些智能合约逻辑 无论如何 是否可以查询超级账本结构网络中的资产修改历史记录 我检查了 Fabric 0 6 和 1 0 版本的文档 但我只能找到stub pushState k
  • 是否可以从 bdist 中排除数据文件源和中间文件?

    我正在使用 setuptools 构建许多数据文件 编译的翻译 图标调整大小并转换为不同的格式等 我想将这些数据文件的来源包含在sdist和构建结果 但不是它们的源和中间文件bdist wheel 当我使用package data源文件 中
  • 在值/键上加入 AngularFire 路径不起作用(将用户配置文件合并到记录中)

    我正在使用 Firebase 1 0 和 Angular 1 4 开发一个应用程序 我遇到的问题是确保视图中的数据与 Firebase 同步 同时从 Firebase 中的两个表获取非规范化数据 图书表如下所示 books JyDpkQrU
  • 检索由shiny::reactive()推断的反应性依赖关系

    考虑一下这个推介会Joe Cheng 解释了他和他的同事如何在闪亮中实现响应式框架 其灵感来自于Meteor 实际问题 有人可以向我解释一下我将如何找到一个反应式对象的依赖关系 即列出它们的名称和环境 实际访问它们等 这些是由shiny r
  • 在 while 循环内部设置的 Shell 变量在其外部不可见

    我试图找到其中字符最多的路径名 可能有更好的方法来做到这一点 但我想知道为什么会出现这个问题 LONGEST CNT 0 find samples while read line do line length echo line wc m
  • 禁用 Asp.Net WebAPI 中的默认验证

    我想完全禁用 WebAPI 控制器的模型验证 我尝试了几种方法来为 MVC 做到这一点 但似乎 WebAPI 没有得到这些方法 就我而言 自定义格式化程序创建并填充对象 默认验证发生 对象传递给控制器 我的代码开始工作 我正在尝试完全删除第
  • 有没有办法只接受 JTextField 中的数字值?

    有没有办法只接受 a 中的数字值JTextField 有什么特殊的方法吗 由于这个问题经常出现 所以我在这个答案上投入了比平时更多的努力 我的投票投给了JFormattedTextField IMO 每个 Swing 开发人员都应该在他 她
  • R:具有重复数据框的扩展函数

    我有一个需要旋转的数据框 但该数据框有重复的标识符 所以spread函数给出错误Error Duplicate identifiers for rows 5 6 Dimension c A A B B A A Date c Mon Tue