R 有没有办法在tbl中使用重塑?
在上一个问题中,我在使用“重塑”时遇到问题: 几个小时后,我意识到这是因为我使用的是tbl格式,而不是data.frame。因此,要使用重塑并保持tbl环境,我必须:R 有没有办法在tbl中使用重塑?,r,dataframe,dplyr,reshape,R,Dataframe,Dplyr,Reshape,在上一个问题中,我在使用“重塑”时遇到问题: 几个小时后,我意识到这是因为我使用的是tbl格式,而不是data.frame。因此,要使用重塑并保持tbl环境,我必须: mydata %>% as.data.frame %>% reshape(, ...) %>% as.tbl 所以我想知道是否还有其他的方法。 < P>更多的是有一个答案比其他任何原因,这里有四个选项要考虑。< /P> 首先,如果要将重塑与“dplyr”一起使用,则必须使用重塑中的new.row.names参
mydata %>% as.data.frame %>% reshape(, ...) %>% as.tbl
所以我想知道是否还有其他的方法。 < P>更多的是有一个答案比其他任何原因,这里有四个选项要考虑。< /P> 首先,如果要将
重塑
与“dplyr”一起使用,则必须使用重塑
中的new.row.names
参数,并将它们设置为预期重塑后的数据集将具有的行数序列。计算起来很容易。取从宽格式到长格式的一批列的长度,乘以原始数据集中的行数
这种方法肯定会让哈德利因不满而坐立不安,因此使用这种方法的风险自负
mydf <- tbl_df(mydf)
class(mydf)
# [1] "tbl_df" "tbl" "data.frame"
mydf %>%
reshape(
idvar="g_id",
direction="long",
varying=list(c(5:14),c(15:24)),
v.names=c("PLC","P"),
new.row.names = seq_len(length(5:14) * nrow(mydf)))
在哈德利诗中,你可以尝试“tidyr”(如@DavidArenburg所建议的)。这并不像他想象的那么漂亮,因为它需要首先制作一个很长的数据集,然后再重新扩展它,不像上面的melt
方法那样一步就完成了不长的重塑
library(tidyr)
mydf %>%
gather(var, val, starts_with("P")) %>%
mutate(var = gsub("([A-Z]+)", "\\1_", var)) %>% ## you can probably be clever and...
separate(var, into = c("variable", "time")) %>% ## come up with some fancier regex
spread(variable, val)
最后,还有我的“splitstackshape”包中的merged.stack
。有了它,方法将是:
library(splitstackshape)
merged.stack(mydf, var.stubs = c("PLC", "P"), sep = "var.stubs")
重塑
相当缓慢且繁琐。您是否已退房reformae2
套餐或tidyr
?它们都应该正常工作。这个问题一定让哈德利感到不安。。。。
library(splitstackshape)
merged.stack(mydf, var.stubs = c("PLC", "P"), sep = "var.stubs")