如何解决R中它们之间的每一列的总和
我有一个像这样的数据框:
dd<-data.frame(col1=c(1,1),col2=c(1,1,col3=c(1,0),col4=c(1,0))
我希望它们之间的每一列之和为
col1+col2 col1+col3 col1+col4 col2+col3 col2+col4 col3+col4
2 2 2 2 2 2
1 1 1 1 1 0
1 1 2 1 2 1
2 1 1 1 1 0
我没有发现谁能做到这一点 请帮助我
解决方法
一个基本的R选项可能是combn
+ rowSums
setNames(
as.data.frame(combn(dd,2,rowSums)),combn(names(dd),paste0,collapse = "+")
)
给出
col1+col2 col1+col3 col1+col4 col2+col3 col2+col4 col3+col4
1 2 2 2 2 2 2
2 1 0 0 1 1 0
3 2 1 2 1 2 1
数据
dd<-data.frame(col1=c(1,1),col2=c(1,1,col3=c(1,0),col4=c(1,1))
,
一种dplyr
和purrr
的可能性是:
map_dfc(.x = combn(names(dd),simplify = FALSE),~ dd %>%
rowwise() %>%
transmute(!!paste(.x,collapse = "+") := sum(c_across(all_of(.x)))))
`col1+col2` `col1+col3` `col1+col4` `col2+col3` `col2+col4` `col3+col4`
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2 2 2 2 2 2
2 1 0 0 1 1 0
3 2 1 2 1 2 1
,
Uglier,并且比上面的基数R慢:
do.call("cbind",setNames(Map(function(i){y <- dd[,i] + dd[,-c(1:i)]},seq_along(dd)[1:ncol(dd)-1]),names(dd)[1:(ncol(dd)-1)]))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。