R:将描述性列和相关值组合成矩阵形式

标签 r plyr reshape reshape2

我有一个冗长的操作数据集 (op#) 和时间 {tm#) 与各种小部件相关联。不幸的是,这些操作没有特定顺序,因此绘制操作可能发生在第一个操作或第 80 个操作中。每个操作在右侧的列中都有完成该操作所需的关联时间。我想组织数据,使每一列都是唯一的操作名称,列中的值是完成该操作所需的相关时间。

# sample data frame
df = data.frame(widget = c("widget 1", "widget 2", "widget 3", "widget 4"),
            op1 = c("paint", "weld", "frame", "weld"),
            tm1 = c(20, 24, 14, 40),
            op2 = c("weld", "coat", "weld", "paint"),
            tm2 = c(10, 20, 50, 30))

print(df)
>      part   op1 tm1   op2 tm2  
> 1 widget1 paint  20  weld  10
> 2 widget2  weld  24  coat  20
> 3 widget3 frame  14  weld  50
> 4 widget4  weld  40 paint  30  

我正在尝试将数据框重新组织为...

>      part  paint  weld  coat  frame 
> 1 widget1     20    10  NULL   NULL
> 2 widget2   NULL    24    20   NULL
> 3 widget3   NULL    50  NULL     14
> 4 widget4     30    40  NULL   NULL

有什么建议吗?

最佳答案

尝试:

If `df1` is the dataset

names(df1)[grep("^op|^tm",names(df1))] <- gsub("([[:alpha:]]+)(\\d+)", "\\1_\\2",   names(df1)[grep("^op|^tm", names(df1))])
 df2 <- reshape(df1, idvar="widget", varying= grep("^op|^tm",names(df1)), sep="_", direction="long")
 library(reshape2)
 dcast(df2, widget~op, value.var="tm")[,c(1,3:5,2)]
 #      widget paint weld coat frame
 #1 widget 1    20   10   NA    NA
 #2 widget 2    NA   24   20    NA
 #3 widget 3    NA   50   NA    14  ##looks like you have 50 instead of 60 as shown in the expected
 #4 widget 4    30   40   NA    NA
  • 我结合使用了 grepgsub 来修改这些列的名称(tmop ) 以便在常用字符和相应的数字之间分隔 _,使得使用 reshape
  • 更容易
  • reshape 为更长的格式后,使用 dcast
  • 将其重新格式化回不同的宽格式

关于R:将描述性列和相关值组合成矩阵形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25147469/

相关文章:

r - 使用 ddply 在新数据帧中强制多个输出

r - 在 R 中从宽到长的复杂整形(从原始变量名中提取多个内容)

r - 如何使用 tidyr::gather 将字符串保留在第一列中?

r - ggplot2: donut ,如何使用 if_else 进行条件颜色填充

r - 让 Zelig 处理列表

r - 如何定义一个函数,它接受括号外的参数,如 names()

r - 使用 dlply 函数更改 R/lattice 中 strip 的背景

r - 同一图中的多个变量

将 R 数据框中的数据从行 reshape 为列

r - 用R中的定界符分割字符串