它们之间每列的总和,单位为R

它们之间每列的总和,单位为R,r,dataframe,sum,R,Dataframe,Sum,我有这样一个数据帧: dd<-data.frame(col1=c(1,0,1),col2=c(1,1,1),col3=c(1,0,0),col4=c(1,0,1,0,1,0,1,0)) 我找不到做那件事的人 请帮助我一个基本R选项可能是combn+rowsumes setNames( as.data.frame(combn(dd, 2, rowSums)), combn(names(dd), 2, paste0, collapse = "+") ) 给

我有这样一个数据帧:

dd<-data.frame(col1=c(1,0,1),col2=c(1,1,1),col3=c(1,0,0),col4=c(1,0,1,0,1,0,1,0))
我找不到做那件事的人
请帮助我

一个基本R选项可能是
combn
+
rowsumes

setNames(
  as.data.frame(combn(dd, 2, rowSums)),
  combn(names(dd), 2, 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,0,1),col2=c(1,1,1),col3=c(1,0,0),col4=c(1,0,1))

dd一个
dplyr
purrr
可能性可能是:

map_dfc(.x = combn(names(dd), 2, 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
map_dfc(.x=combn(名称(dd),2,simplify=FALSE),
~dd%>%
行()
transmute(!!粘贴(.x,collapse=“+”):=sum(c_横跨(所有的(.xщ)!)
`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

比上面的基础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)]))

do.call(“cbind”),无法生成您提供的setNames(函数(i){y
data.frame
,您在最后一列中定义的行数与其他列不同。当我运行代码时,R在data.frame(col1=c(1,0,1),col2=c(1,1,1),col3=c)中抛出一个错误(1,:参数表示不同的行数:3,8
。检查最后一列,您尝试定义8行,所有其他列都有3行。非常感谢!您知道如何使用3列执行相同操作吗?@Aubrée也许您可以尝试在我的代码中将
2
替换为
3
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)]))