我有多个数据帧,我可以合并和融合。融化后,我想根据行所属的原始数据帧为长数据帧添加一个标识符。
library(reshape2)
df1 <- data.frame(User=factor(LETTERS[24:26]), A=c(1,2,3), B=c(1,2,3))
df2 <- data.frame(User=factor(LETTERS[23:25]), C=c(1,2,3), D=c(1,2,3))
df.comb <- merge(df1, df2, by="User", all=T)
df.m <- melt(df.comb, id.vars="User")
这里我根据df1和df2的列名中cat
中变量(A,B,C,D)的外观来分配因子df.m$variables
。
df.m$cat <- ifelse(df.m$variable %in% names(df1) , "df1",
ifelse(df.m$variable %in% names(df2), "df2", "df1"))
不幸的是,我有更多的数据帧(总共9个);因此ifelse变得非常乏味和复杂(如果可能的话,我没有尝试过)。
df3 <- data.frame(User=factor(LETTERS[22:24]), E=c(1,2,3), F=c(1,2,3))
df.comb <- merge(merge(df1, df2, by="User", all=T), df3, by="User", all=T)
df.m <- melt(df.comb, id.vars="User")
根据数据框列名中df.m$cat
的外观来分配df.m$variable
的最佳方法是什么?我所有数据框的列名都是唯一的。
答案 0 :(得分:1)
您可以使用case_when
中的dplyr
。如果其他选项都不起作用,则TRUE
是else部分。
library(dplyr)
df.m$cat <- as.factor(case_when(df.m$variable %in% names(df1) ~ "df1",
df.m$variable %in% names(df2) ~ "df2",
df.m$variable %in% names(df3) ~ "df3",
TRUE ~ "No df"))