R 使用ifelse和备选方案分配因子水平
我有多个数据帧,需要合并和融化。熔化后,我想根据行所属的原始数据帧向长数据帧添加一个标识符R 使用ifelse和备选方案分配因子水平,r,R,我有多个数据帧,需要合并和融化。熔化后,我想根据行所属的原始数据帧向长数据帧添加一个标识符 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="Use
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")
不幸的是,我有更多的数据帧(总共九个);所以ifelse变得非常乏味和复杂(如果可能的话,我还没有尝试过)
df3您可以在dplyr
中使用case\u。如果其他选项都不起作用,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"))
库(dplyr)
df.m$cat来自dplyr
的case\u语句可以帮助您解决这个问题
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")
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"))