簡體   English   中英

在 R 中遞歸地加入列

[英]join columns recursively in R

您好,我有一個包含 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 列相加,最后獲得具有兩列的 dataframe

在此處輸入圖像描述

你應該付給我類似的東西在此處輸入圖像描述

我已經編寫了以下代碼



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

這是另一種通用方法:

在這里,我們將所有不均勻的列 -> s1 和所有的偶數列 -> s2 相加:

library(dplyr)

dat %>%
  rowwise() %>% 
  mutate(s1 = sum(c_across(seq(1,ncol(dat),2)), na.rm = TRUE),
         s2 = sum(c_across(seq(2,ncol(dat),2)), na.rm = TRUE))
     cl1   cl2   cl3   cl4   cl5   cl6    s1    s2
   <int> <int> <int> <int> <int> <int> <int> <int>
 1     1     1     3     2     3     2     7     5
 2     2     4     1     4     2     3     5    11
 3     2     2     2     2     1     3     5     7
 4     2     4     4     3     1     4     7    11
 5     2     4     4     3     2     2     8     9
 6     3     3     3     2     2     2     8     7
 7     2     1     1     2     1     4     4     7
 8     2     4     1     3     2     3     5    10
 9     3     1     1     2     3     4     7     7
10     2     4     1     3     4     4     7    11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM