我正在尝试编写一段代码,以对数据帧的不同列执行一组操作(每列一个操作),并且可以在遵循相同列布局的多个数据帧上重复执行这些代码。
到目前为止,我一直在通过为每个输入数据帧创建一个结果数据帧并为我拥有的所有数据帧重做此操作来做到这一点。
result_df_1 = data.frame (c1 = sum(ip_df$c1[which(ip_df$c1 == 1)],
.
.
)
result_df_2 = data.frame (c1 = sum(ip_df$c1[which(ip_df$c1 == 1)],
.
.
)
.
.
result_df_21 = data.frame (c1 = sum(ip_df$c1[which(ip_df$c1 == 1)],
.
.
)
我想通过覆盖输入数据帧的以下内容来尝试自动执行此过程。作为快照,我想执行以下操作,
col_1 = sum-if(col_val=1),
col_2 = sum-if(col-val>0)
col_3 = mean-if(col_val>0)
col_4 = sum-if(col_val = 1)
col_5 = sum-if(col_val = 1)
col_6 = sum-if(col_val = 1)
col_7 = sum-if(col_val = 1)
.
.
.
数据示例如下
c1|c2|c3|c4|c5|c6|c7
1 | 4| 8| 1| 1| 0|0
1 | 0| 6| 1| 1| 0|0
0 | 3| 9| 0| 1| 1|0
Store the results of the operations (above) in col_8 to col_11 in a temp_df (below).
temp_df_1 = data.frame(col_8 = (col_4*col_3)
col_9 = (col_4*col_3)
col_10 = (col_4*col_3)
col_11 = (col_4*col_3)
)
每个数据框大约有32列,我需要21个数据框来复制这些简单的操作。 对于每个数据帧,结果将进入具有一列的数据帧,该数据帧是存储在上述temp_df(col_8至col_11)中的4列的总和。
res_df = data.frame(res_df1 = c(rowSums(temp_df1),
res_df2 = c(rowSums(temp_df2),
.
.
res_df21 = c(rowSums(temp_df21)
)
到目前为止,我一直在手动执行此操作,并且由于我需要对更多数据进行此操作并且我的方法目前效率非常低,因此希望将其自动化。任何帮助将不胜感激。
答案 0 :(得分:0)
最好是准备一个检测列的函数以知道要调用哪个函数。我不会在您的位置这样做(因为这将是艰巨的工作,并且您将不会学到任何东西),但是以下是我可以提供的最佳提示:
lapply()
是您的朋友,可以在各列中浏览do.call()
是调用函数所需要的。另请了解symbol
类型和eval()
函数。switch()
可以干净地检测列内容,但是一系列if
也可以完成。也尝试ifelse()
我希望这会对您有所帮助。最后,我遇到了类似的问题,将您重定向到我的git,但我更喜欢看到人们学习;)