gpt4 book ai didi

r - 在R中递归连接列

转载 作者:行者123 更新时间:2023-12-02 15:47:09 25 4
gpt4 key购买 nike

你好,我有一个包含 245 列的数据框,但要添加一些集合并生成新列,请尝试按如下方式递归执行此操作

cl1<-sample(1:4,10,replace=TRUE)
cl2<-sample(1:4,10,replace=TRUE)
cl3<-sample(1:4,10,replace=TRUE)
cl4<-sample(1:4,10,replace=TRUE)
cl5<-sample(1:4,10,replace=TRUE)
cl6<-sample(1:4,10,replace=TRUE)
dat<-data.frame(cl1,cl2,cl3,cl4,cl5,cl6)

我的目的是将第 1 列添加到第 3 列和第 5 列,同样将第 2 列添加到第 4 列和第 6 列,最后获得一个包含两列的数据框

enter image description here

你应该付给我类似的东西enter image description here

我编写了以下代码



revisar<- function(a){
todos = list()
i=1
j=3
l=5
k=1
while(i<=2 ){

cl<-a[,i]
cl2<-a[,j]
cl3<-a[,l]
cl[is.na(cl)] <- 0
cl2[is.na(cl2)] <- 0
cl3[is.na(cl3)] <- 0

colu<-cl+cl2+cl3

col<-cbind(colu,colu)

i<-i+1
j<-j+1
l<-l+1
k<-k+1
}

return(col)
}

事实证明,它只返回重复两次的第 2 列,我必须复制相同的东西才能连接那 245 列。7

我想知道这个例子失败的原因

最佳答案

碱基R

文字编程:

with(dat, data.frame(s1 = cl1+cl3+cl5, s2 = cl2+cl4+cl6))
# s1 s2
# 1 7 11
# 2 7 7
# 3 4 11
# 4 4 10
# 5 9 8
# 6 12 5
# 7 7 6
# 8 7 10
# 9 4 9
# 10 6 5

以编程方式,

L <- list(s1 = c(1,3,5), s2 = c(2,4,6))
out <- data.frame(lapply(L, function(z) do.call(rowSums, list(as.matrix(dat[,z])))))
out
# s1 s2
# 1 7 11
# 2 7 7
# 3 4 11
# 4 4 10
# 5 9 8
# 6 12 5
# 7 7 6
# 8 7 10
# 9 4 9
# 10 6 5

dplyr

library(dplyr)
dat %>%
transmute(
s1 = rowSums(cbind(cl1, cl3, cl5)),
s2 = rowSums(cbind(cl2, cl4, cl6))
)

或以编程方式使用 purrr:

purrr::map_dfc(L, ~ rowSums(dat[, .]))

数据

set.seed(42)
# your `dat` above

关于r - 在R中递归连接列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73777520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com