我无法将R中的10列堆叠成每列相关的两列5列。基本上我有类似的东西:
Name1,ID1,Name2,ID2,Name3,ID3,Name4,ID4,Name5,ID5
我需要将它们堆叠到Name和ID表中,其中每个Name列中的值仍然与其ID对应。什么是最好的方法来解决这个问题?
谢谢!
答案 0 :(得分:4)
我会从" data.table"中推荐melt
。封装
这是一些示例数据。 (这是你应该分享的东西。)
mydf <- data.frame(
matrix(1:20, ncol = 10, dimnames = list(NULL, paste0(c("Name", "ID"),
rep(1:5, each = 2)))))
mydf
## Name1 ID1 Name2 ID2 Name3 ID3 Name4 ID4 Name5 ID5
## 1 1 3 5 7 9 11 13 15 17 19
## 2 2 4 6 8 10 12 14 16 18 20
以下是重塑:
library(data.table)
melt(as.data.table(mydf), measure = patterns("Name", "ID"),
value.name = c("Name", "ID"))
## variable Name ID
## 1: 1 1 3
## 2: 1 2 4
## 3: 2 5 7
## 4: 2 6 8
## 5: 3 9 11
## 6: 3 10 12
## 7: 4 13 15
## 8: 4 14 16
## 9: 5 17 19
## 10: 5 18 20
答案 1 :(得分:0)
你可以通过重塑
来做到这一点library(dplyr)
library(tidyr)
library(rex)
variable_regex =
rex(capture("Name" %>%
or ("ID") ),
capture(digits) )
mydf %>%
mutate(row_ID = 1:n()) %>%
gather(variable, value, -row_ID) %>%
extract(variable,
c("new_variable", "column_ID"),
variable_regex) %>%
spread(new_variable, value)