将每个数据帧迭代地附加到更大的数据框中R +在Excel中复制枢轴功能

时间:2016-01-24 15:10:30

标签: r dataframe pivot-table

我确实搜索了此内容并链接到条目HEREHEREHERE

但他们没有回答我的问题。

代码:

for (i in 1:nrow(files.df)) {
  Final <- parser(as.character(files.df[i,]))
  Final2 <- rbind(Final2,Final)
}

files.df包含超过30个文件名(使用list.files从目录中读取),然后将其传递给自定义函数解析器,该解析器返回一个保存超过100行的数据帧(数字从一个文件到下一个文件不同)。 Final和Final2都在for循环之外用NA初始化。该脚本运行良好的rbind但它的语义问题 - 结果输出不是我所期望的。结果数据帧比组合的文件小很多。

我确定它与rbind位有关。

其次,我希望模仿excel中的枢轴功能,我有四列,每行重复第一列,第二列是不同的,第三列是不同的,第四列是不同的。最终的数据框应围绕第一列旋转。有什么想法,我怎么能做到这一点?我有一个演员和融化,但无济于事。

任何想法都会很棒!如果我能坚持数据框架结构会很好。

附上图片以供参考:

Before pivot With pivot on and ideal output

1 个答案:

答案 0 :(得分:0)

对于您的数据透视功能,基本上需要将数据帧从长格式转换为宽格式,在 CC arch/arm/mach-msm/board-8930-display.o arch/arm/mach-msm/board-8930-display.c: In function 'mipi_dsi2lvds_cdp_panel_power': arch/arm/mach-msm/board-8930-display.c:577:3: error: implicit declaration of function 'msm_xo_get' [-Werror=implicit-function-declaration] arch/arm/mach-msm/board-8930-display.c:577:26: error: 'MSM_XO_TCXO_A1' undeclared (first use in this function) arch/arm/mach-msm/board-8930-display.c:577:26: note: each undeclared identifier is reported only once for each function it appears in arch/arm/mach-msm/board-8930-display.c:663:3: error: implicit declaration of function 'msm_xo_mode_vote' [-Werror=implicit-function-declaration] arch/arm/mach-msm/board-8930-display.c:663:31: error: 'MSM_XO_MODE_ON' undeclared (first use in this function) arch/arm/mach-msm/board-8930-display.c:671:31: error: 'MSM_XO_MODE_OFF' undeclared (first use in this function) cc1: some warnings being treated as errors make[1]: *** [arch/arm/mach-msm/board-8930-display.o] Error 1 make: *** [arch/arm/mach-msm] Error 2 } 列上进行聚合,您可以使用基数R的reshape()

Value

或者,如下所示的专用包reshape2往往不那么冗长,而且后期格式化也较少。因此,大多数人更喜欢这种转化路线另外,与Excel Pivot Tables一样,其他聚合函数也可用(总和,平均值,长度等):

reshapedf <- reshape(df, v.names = c("Value"),
                     timevar=c("Identifier"),
                     idvar = c("Date"), 
                     direction = "wide")
# RENAME COLUMNS
names(reshapedf) <- c('Date', 'A', 'B', 'C')
# CONVERT NAs TO ZEROS
reshapedf[,c(2:4)] <- data.frame(sapply(reshapedf[,c(2:4)], 
                                        function(x) ifelse(is.na(x),0,x)))
# RESET ROW.NAMES
row.names(reshapedf) <- 1:nrow(reshapedf)