如何以下列方式组合数据框的列?
data <- data.frame(user.A = c(2,4,6),
user.B = c(11,13,15),
other.A = c(102,104,106),
other.B = c(201,103,105),
id = c('001', '004', '006'))
data
user.A user.B other.A other.B id
1 2 11 102 201 001
2 4 13 104 103 004
3 6 15 106 105 006
# Desired output.
user other id
1 2 102 001
2 11 201 001
3 4 104 004
4 13 103 004
5 6 106 006
6 15 105 006
我相信可以使用dyplr
或tidyr
来完成此操作。 bind_rows
中的dplyr
函数执行类似操作,但不会创建所需的输出。
答案 0 :(得分:2)
来自melt
的{{1}}会更容易,因为它可能需要多个data.table
measure
。
patterns
作为“用户”,“其他”列为library(data.table)
melt(setDT(data), measure = patterns("^user", "^other"),
value.name = c("user", "other"))[, variable := NULL][]
# id user other
#1: 001 2 102
#2: 004 4 104
#3: 006 6 106
#4: 001 11 201
#5: 004 13 103
#6: 006 15 105
,我们也可以使用numeric
中的gather/spread
tidyr
答案 1 :(得分:2)
您可以使用library(dplyr)
library(tidyr)
gather(data, var, val, -id) %>%
separate(var, into = c("var1", "var2")) %>%
spread(var1, val) %>%
select(-var2)
# id other user
#1 001 102 2
#2 001 201 11
#3 004 104 4
#4 004 103 13
#5 006 106 6
#6 006 105 15
功能的变体,如下所示:
reshape
new_data <- reshape(data, varying = 1:4, direction = "long")
参数用于指定要转向的列。