在多个数据帧上使用if-else的R for循环
提前问候并感谢您的帮助 我有许多数据框,类似于下面的数据框 df1 数据帧在多个数据帧上使用if-else的R for循环,r,if-statement,R,If Statement,提前问候并感谢您的帮助 我有许多数据框,类似于下面的数据框 df1 数据帧 name other 1 sam pro 2 dad mo1 3 mom Bxxx 框架3 name otherinfo 1 jus A 2 do 7 3 r pro B 4 sir B 5 real na 6 pete yes 嗅框 name information 1 al
name other
1 sam pro
2 dad mo1
3 mom Bxxx
框架3
name otherinfo
1 jus A
2 do 7
3 r pro B
4 sir B
5 real na
6 pete yes
嗅框
name information
1 ally x1
2 mom B9
3 r pro s3B
4 tom Bd0
5 kelly ot
6 jojo who
7 na 11
我想:
name information df1 dframe frame3
1 ally x1 0 0 0
2 mom B9 0 1 0
3 r pro s3B 0 0 1
4 tom Bd0 1 0 0
5 kelly ot 0 0 0
6 jojo who 0 0 0
7 na 11 0 0 0
我可以一次做一个(如下),但我有100多个文件要看
newOLFrame<-OLFrame
newOLFrame[,"pro1"]<-ifelse(newOLFrame$name %in% df12$name, 1, 0)
newOLFrame考虑扩展链合并,首先构建一个数据帧列表,以迭代方式左键连接到OLFrame,然后在末尾使用Reduce
进行链合并:
df_list <- lapply(c("df1", "dframe", "frame3"), function(nm) {
df <- get(nm)
df[[nm]] <- 1
df <- merge(OLFrame, df[c("name", nm)], by="name", all.x=TRUE)
df[[nm]] = ifelse(is.na(df[[nm]]), 0, 1)
return(df)
})
# MERGE ALL DFs
final_df <- Reduce(function(x, y) merge(x, y, by=c("name", "information")), df_list)
final_df
# name information df1 dframe frame3
# 1 ally x1 0 0 0
# 2 jojo who 0 0 0
# 3 kelly ot 0 0 0
# 4 mom B9 0 1 0
# 5 na 11 0 0 0
# 6 r pro s3B 0 0 1
# 7 tom Bd0 1 0 0
非常感谢。如果“name”列是两列“firstname”、“lastname”,那么应该如何调整代码?将name替换为df列选择和参数中的附加项。我这样做了,效果很好,谢谢。在大文件上,速度很慢;我们可以做些什么来加快速度吗。其给定的内存错误,除了减少环境中的文件量之外;还可以执行其他操作吗?data.frame(…,check.names=FALSE)中的错误:参数意味着不同的行数:91674、843779、52800来自不同文件的结果具有不同的长度,这阻碍了最终合并:“final_df
df_list <- lapply(c("df1", "dframe", "frame3"), function(nm) {
df <- get(nm)
df[[nm]] <- 1
df <- merge(OLFrame, df[c("name", nm)], by="name", all.x=TRUE)
df[[nm]] = ifelse(is.na(df[[nm]]), 0, 1)
return(df)
})
# MERGE ALL DFs
final_df <- Reduce(function(x, y) merge(x, y, by=c("name", "information")), df_list)
final_df
# name information df1 dframe frame3
# 1 ally x1 0 0 0
# 2 jojo who 0 0 0
# 3 kelly ot 0 0 0
# 4 mom B9 0 1 0
# 5 na 11 0 0 0
# 6 r pro s3B 0 0 1
# 7 tom Bd0 1 0 0
df_list <- lapply(c("df1", "dframe", "frame3"), function(nm) {
df <- get(nm)
df[[nm]] <- 1
df <- merge(OLFrame, df[c("name", nm)], by="name", all.x=TRUE, sort=FALSE)
df[[nm]] = ifelse(is.na(df[[nm]]), 0, 1)
df <- with(df, df[order(name, information),]) # ORDER DATA FRAME
small_df <- setNames(as.data.frame(df[[nm]]), nm) # SUBSET ONE COLUMN
return(small_df)
})
# ORDER DATA FRAME
OLFrame <- with(OLFrame, OLFrame[order(name, information),])
final_df <- do.call(cbind, c(OLFrame, df_list))
final_df
# name information df1 dframe frame3
# 1 ally x1 0 0 0
# 2 jojo who 0 0 0
# 3 kelly ot 0 0 0
# 4 mom B9 0 1 0
# 5 na 11 0 0 0
# 6 r pro s3B 0 0 1
# 7 tom Bd0 1 0 0