簡體   English   中英

添加行並將其應用於R中的數據框

[英]Adding rows and applying it to a data frame in R

我有一個df:

Q1_3  Q2_3  Q3_3  Q4_3  Q5_3 ...  
16.01  8.23 18.13 11.14 18.03 ...  
17.25  7.50 11.72 10.84  7.24 ...  
3.08  2.12  4.39  3.16  2.44 ...    
4.94  3.95  6.87  3.75  4.10 ...  
3.89  8.35  7.80  2.90  2.55 ...  

我想創建一個順序添加df [1:5],[6:10]等的函數,並將其應用於整個數據框。

fun1<- function(x) c(x[1] + x[2], x[3] + x[4], x[5] + x[6], x[7] + x[8], x[9] + x[10], x[11] + x[12], x[13] + x[14]) 

我使用這個來做另一個我需要的,但是我認為應該有一種方法來使用seq()或rep()並將它應用於整個df。

testfun<- function(x) c(rowSums(x[1:5])) 

這會增加我需要的列,但是我無法弄清楚如何為整個df排序。 我很感激你的幫助。

謝謝

我們可以遍歷序列( seq(1, ncol(df1), by =5) ),創建索引( i:(i+4) ),對數據集進行子集,執行rowSums ,然后使用原始數據集進行cbind

cbind(df1, sapply(seq(1, ncol(df1), by=5), function(i)
                rowSums(df1[i:pmin((i+4), ncol(df1))], na.rm=TRUE)))

如果我們需要一個功能

f1 <- function(dat, n=5){
       cbind(dat, sapply(seq(1, ncol(dat), by = n), function(i)
             rowSums(dat[i:pmin((i+(n-1)), ncol(dat))], 
               na.rm=TRUE)))
       }
f1(df1) 
 n <- 5
 g <- as.numeric(gl(ncol(df1), n, ncol(df1)))
 e2 <- t(aggregate(t(as.matrix(df1))~ g, FUN=sum)[,-1])
 cbind(df1, e2)

1.構造一個對列進行分組的因子。
2.聚合轉置的數據幀
3. cbind()

並且稍微短一些:

n <- 5
g <- as.numeric(gl(ncol(df1), n, ncol(df1)))
e2 <- aggregate(t(df1)~ g, FUN=sum)
cbind(df1, t(e2[-1]))

作為功​​能:

f <- function(df, n=5) {
    g <- as.numeric(gl(ncol(df), n, ncol(df)))
    aggregate(t(df)~ g, FUN=sum)
}
cbind(df1, t(f(df1)[-1]))

暫無
暫無

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

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