它们之间每列的总和,单位为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){ydata.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)]))