R:根据复合列名将数据框从宽格式重塑为长格式
R: reshape dataframe from wide to long format based on compound column names
我有一个数据框,其中包含两组数据 (A,B) 的观察结果,数据集和观察类型由列名给出:
mydf <- data.frame(meta1=paste0("a",1:2), meta2=paste0("b",1:2),
A_var1 = c(11:12), A_var2 = c("p","r"),
B_var1 = c(21:22), B_var2 = c("x","z"))
我想重塑此数据框,使每一行仅包含一组观察值。在这种长格式中,集和列名应该通过在“_”处拆分原始列名来给出:
mydf2 <- data.frame(meta1=rep(paste0("a",1:2),2),
meta2=rep(paste0("b",1:2),2),
set=c("A","B","A","B"),
var1 = c(11:12),
var2 = c("a","b","c","d"))
我曾尝试将 'gather' 与 'str_split'、'sub' 结合使用,但不幸的是没有成功。这可以使用 tideverse 函数来完成吗?
是的,您可以使用 tidyverse
!
你很接近,你需要gather
,然后separate
,然后spread
。
new_df <- mydf %>%
gather(set, vars, 3:6) %>%
separate(set, into = c('set', 'var'), sep = "_") %>%
spread(var, vars)
希望对您有所帮助!
我有一个数据框,其中包含两组数据 (A,B) 的观察结果,数据集和观察类型由列名给出:
mydf <- data.frame(meta1=paste0("a",1:2), meta2=paste0("b",1:2),
A_var1 = c(11:12), A_var2 = c("p","r"),
B_var1 = c(21:22), B_var2 = c("x","z"))
我想重塑此数据框,使每一行仅包含一组观察值。在这种长格式中,集和列名应该通过在“_”处拆分原始列名来给出:
mydf2 <- data.frame(meta1=rep(paste0("a",1:2),2),
meta2=rep(paste0("b",1:2),2),
set=c("A","B","A","B"),
var1 = c(11:12),
var2 = c("a","b","c","d"))
我曾尝试将 'gather' 与 'str_split'、'sub' 结合使用,但不幸的是没有成功。这可以使用 tideverse 函数来完成吗?
是的,您可以使用 tidyverse
!
你很接近,你需要gather
,然后separate
,然后spread
。
new_df <- mydf %>%
gather(set, vars, 3:6) %>%
separate(set, into = c('set', 'var'), sep = "_") %>%
spread(var, vars)
希望对您有所帮助!