【发布时间】:2017-06-20 09:52:27
【问题描述】:
我有两个数据框 df1 和 df2 的列表(请参阅下面的数据)。对于每个数据框,我试图获得两个汇总数字 1)Pat 和 Ben 的计数和 2)Pat 和 Ben 的 a 和 b 列(0/0 或 1/1)之间的一致性出现次数。使用 dplyr,我可以像这样从数据帧中单独获取这些数字(例如,dput(my_list) 中下面列表中的 df1:
final_table<-mutate(df1,dam=apply(df1[,c(1:2)],1,function(x)length(grep("1",as.factor(x)))))%>%mutate(tol=apply(df1[,c(1:2)],1,function(x)length(grep("0",as.factor(x)))))%>% mutate(prop.concordant=ifelse(dam==0,1,dam/(dam+tol)))%>%group_by(c)%>%summarise(count=n(),complete_concordance_num=length(which(prop.concordant==1)))
看起来像这样:
> final_table
# A tibble: 2 x 3
c count complete_concordance_num
<chr> <int> <int>
1 Ben 43 37
2 Pat 57 55
但是,我在通过数据框列表(即列表中的 df1 和 df2)实现此功能时遇到问题。 lapply 或 purrr::map 似乎都不起作用。每个数据帧的障碍似乎是不同的列名(第 1 列和第 2 列)。真的很感激任何线索!
这是一个测试列表(实际列表包含 500 个数据框,每个数据框的第 1 列和第 2 列名称不同):
dput(my_list)
list(structure(list(a = c("0", "0", "1", "1", "1", "1", "1",
"0", "0", "0", "1", "1", "1", "1", NA, "1", "0", "0", "1", "1",
"1", NA, "1", "1", "1", "0", "0", "1", "1", "0", "1", "1", "0",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "0", "1", "0",
"1", "1", "1", NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
"0", "1", "1", "1", "1", "1", "1", "0", "1", "0", "1", "0", "1",
"1", "0", NA, NA, "0", NA, "1", "0", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"
), b = c("1", "0", "1", "1", "1", "1", "1", "0", "0", "0", "1",
"1", "1", "1", "1", "1", "1", "0", "1", "1", "1", "1", "1", "0",
"1", "0", "1", "1", "1", "1", "1", "1", "0", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "0", "0", "1", "1", "1", "1", "1",
"0", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "0", "1",
"1", "1", "1", "1", "1", "0", "1", "0", "1", "0", "1", "1", "0",
"1", "1", "0", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1"), c = c("Pat",
"Ben", "Pat", "Pat", "Pat", "Pat", "Pat", "Ben", "Ben", "Ben",
"Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben",
"Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben",
"Pat", "Ben", "Pat", "Pat", "Ben", "Pat", "Pat", "Pat", "Pat",
"Pat", "Pat", "Pat", "Pat", "Ben", "Ben", "Ben", "Ben", "Ben",
"Pat", "Pat", "Pat", "Ben", "Ben", "Pat", "Pat", "Pat", "Pat",
"Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Ben", "Pat", "Pat",
"Pat", "Ben", "Pat", "Ben", "Ben", "Pat", "Ben", "Pat", "Ben",
"Pat", "Pat", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Pat",
"Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat",
"Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat"
)), .Names = c("a", "b", "c"), row.names = c(NA, 100L), class = "data.frame"),
structure(list(x = c("0", "0", "1", "1", "1", "1", "1", "0",
"0", "0", "1", "1", "1", "1", NA, "1", "0", "0", "1", "1",
"1", NA, "1", "1", "1", "0", "0", "1", "1", "0", "1", "1",
"0", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "0",
"1", "0", "1", "1", "1", NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, "0", "1", "1", "1", "1", "1", "1", "0", "1",
"0", "1", "0", "1", "1", "0", NA, NA, "0", NA, "1", "0",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "1", "1", "1", "1"), y = c("1", "0", "1", "1",
"1", "1", "1", "0", "0", "0", "1", "0", "1", "1", "0", "1",
"1", "0", "1", "0", "0", "0", "0", "1", "1", "0", "0", "1",
"1", "0", "1", "1", "0", "1", "1", "1", "1", "1", "1", "1",
"1", "0", "0", "0", "0", "0", "1", "1", "0", "0", "0", "1",
"1", "1", "1", "1", "1", "1", "1", "1", "1", "0", "1", "1",
"1", "1", "1", "0", "0", "1", "0", "1", "0", "1", "1", "0",
"0", "0", "1", "0", "0", "1", "1", "1", "1", "1", "1", "1",
"1", "1", "0", "0", "1", "1", "1", "1", "1", "1", "1", "1"
), c = c("Pat", "Ben", "Pat", "Pat", "Pat", "Pat", "Pat",
"Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben",
"Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben", "Ben",
"Ben", "Ben", "Ben", "Pat", "Ben", "Pat", "Pat", "Ben", "Pat",
"Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Ben", "Ben",
"Ben", "Ben", "Ben", "Pat", "Pat", "Pat", "Ben", "Ben", "Pat",
"Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat",
"Ben", "Pat", "Pat", "Pat", "Ben", "Pat", "Ben", "Ben", "Pat",
"Ben", "Pat", "Ben", "Pat", "Pat", "Ben", "Ben", "Ben", "Ben",
"Ben", "Ben", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat",
"Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat", "Pat",
"Pat", "Pat", "Pat")), .Names = c("x", "y", "c"), row.names = c(NA,
100L), class = "data.frame"))
【问题讨论】:
-
还有 NA 值。在代码中,并没有显示你想如何处理它
-
@akrun 是的应该提到。有 NA。如果该功能在完整的情况下运行,那很好。感谢您指出。