当多于两列时重塑为宽格式
reshape to wide format when more than two columns
如果之前有人问过这个问题,我深表歉意,我没有发现任何类似的问题。
所以,当我们有类似
的东西时,重塑是微不足道的
id status1 value
1 active 1
2 close 23
整形后的结果将是
id active close
1 1 23
但是,如果我们的 table 有多个状态栏怎么办?我们需要通过 status1 和 status2 列进行整形?
id status1 status2 value
1 active complete 2
2 close overdue 3
期待结果
id active close complete overdue
首页问题说清楚了。
任何意见或建议将不胜感激。
不太确定你想要什么,但也许这可行。
示例:
library(reshape2)
df <- as.data.frame(cbind(c(1,2,3), c("Active", "Close", "Active"),c("one", "two", "one"), c(5,6,7)))
colnames(df) <- c("id", "status1", "status2", "value")
df1 <- dcast(df, id ~ status1)
df2 <- dcast(df, id ~ status2)
merge(df1, df2)
还有一个选项:
library(reshape2)
df <- read.table(header=T, text="id status1 status2 val
1 active complete 2
2 close overdue 3")
recast(df, id~value, id.var = c(1, 4), value.var = "val")
# id active close complete overdue
# 1 1 2 NA 2 NA
# 2 2 NA 3 NA 3
如果之前有人问过这个问题,我深表歉意,我没有发现任何类似的问题。 所以,当我们有类似
的东西时,重塑是微不足道的id status1 value
1 active 1
2 close 23
整形后的结果将是
id active close
1 1 23
但是,如果我们的 table 有多个状态栏怎么办?我们需要通过 status1 和 status2 列进行整形?
id status1 status2 value
1 active complete 2
2 close overdue 3
期待结果
id active close complete overdue
首页问题说清楚了。 任何意见或建议将不胜感激。
不太确定你想要什么,但也许这可行。
示例:
library(reshape2)
df <- as.data.frame(cbind(c(1,2,3), c("Active", "Close", "Active"),c("one", "two", "one"), c(5,6,7)))
colnames(df) <- c("id", "status1", "status2", "value")
df1 <- dcast(df, id ~ status1)
df2 <- dcast(df, id ~ status2)
merge(df1, df2)
还有一个选项:
library(reshape2)
df <- read.table(header=T, text="id status1 status2 val
1 active complete 2
2 close overdue 3")
recast(df, id~value, id.var = c(1, 4), value.var = "val")
# id active close complete overdue
# 1 1 2 NA 2 NA
# 2 2 NA 3 NA 3