我需要在我的任务之一中提供指导:在这里我需要根据数据集浏览并上传用户的每两列,其中总列数变化[任何偶数列].类似于我随文本一起上传的图像,基本上我们可以说我们正在堆叠每两列一个并创建一个新的数据框,其中有两列,如图所示,提前谢谢你
我们split的数据集由列名的字符子(除去用数字gsub)转换成一个list,改变names的list与setNames和rbind所述list元件,以一个单一的data.table使用rbindlist并指定idcol为"标签"
library(data.table)
lst <- split.default(df1, gsub("\\d+", "", names(df1)))
#or use
#lst <- split.default(df1, cumsum(rep(c(TRUE, FALSE), ncol(df1)/2)))
rbindlist(setNames(lst, seq_along(lst)), idcol="Tag")
Run Code Online (Sandbox Code Playgroud)
set.seed(24)
df1 <- as.data.frame(matrix(rnorm(10*8), ncol=8,
dimnames = list(NULL, paste0(rep(LETTERS[1:4], each = 2), 0:1))))
Run Code Online (Sandbox Code Playgroud)
reshape如果您将列重命名为适当分组,则这是一项操作:
names(df1) <- gsub("(.)(.)", "\\2.\\1", names(df1))
reshape(df1, direction="long", varying=TRUE, sep=".", timevar="Tag")
# Tag 0 1 id
#1.A A -0.545880758 -1.31690812 1
#2.A A 0.536585304 0.59826911 2
#3.A A 0.419623149 -0.76221437 3
#4.A A -0.583627199 -1.42909030 4
#5.A A 0.847460017 0.33224445 5
#6.A A 0.266021979 -0.46906069 6
#7.A A 0.444585270 -0.33498679 7
#8.A A -0.466495124 1.53625216 8
#9.A A -0.848370044 0.60999453 9
#10.A A 0.002311942 0.51633570 10
#1.B B -0.074308561 -0.03373792 1
#2.B B -0.605156946 -0.58542756 2
# ...
Run Code Online (Sandbox Code Playgroud)
使用@ akrun的 df1
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |