簡體   English   中英

如何計算列表中數據框的rowMeans?

[英]How to calculate rowMeans for dataframes in a list?

我有一個看起來像這樣的列表(my.list):

> my.list
$S1
  A B C D
1 5 2 3 2
2 6 3 4 3
3 7 5 5 5
4 2 3 6 7
5 6 6 7 6

$S2
  A B C D
1 5 2 3 2
2 6 3 4 3
3 7 5 5 5
4 2 3 6 7
5 6 6 7 6

我想通過采用 AD 列的行均值來創建一個新變量“E”。

我試過使用兩個循環:

test_list<-list()

for(i in 1:5){
  test_data$E <- list.append(test_list, mylist[[i]] %>% rowMeans(mylist[,c("A","B","C","D")]))
}

並應用:


merged_data <- lapply(merged_data, transform, E = rowMeans(mylist[,c("A","B","C","D")]))

兩者似乎都不起作用。 我收到錯誤消息:

Error in mylist[c("A","B","C","D"),  : 
  incorrect number of dimensions

我該怎么做呢?

可重現的數據:

my.list <- structure(list(S1 = structure(list(A = c(5, 6, 7, 2, 6), B = c(2,3,5,3,6), C = c(3,4,5,6,7), D = c(2,3,5,7,6)),.Names = c("A", "B", "C", "D"), class = "data.frame", row.names = c("1","2", "3", "4", "5")), S2 = structure(list(A = c(5, 6, 7, 2, 6), B = c(2,3,5,3,6), C = c(3,4,5,6,7), D = c(2,3,5,7,6)), .Names = c("A", "B", "C", 
"D"), class = "data.frame", row.names = c("1", "2", "3", "4","5"))), .Names = c("S1", "S2"))

使用lapply

lapply(my.list, \(x)transform(x, E = rowMeans(x)))

甚至

lapply(my.list, \(x)cbind(x, E = rowMeans(x)))

兩者都導致:

$S1
  A B C D    E
1 5 2 3 2 3.00
2 6 3 4 3 4.00
3 7 5 5 5 5.50
4 2 3 6 7 4.50
5 6 6 7 6 6.25

$S2
  A B C D    E
1 5 2 3 2 3.00
2 6 3 4 3 4.00
3 7 5 5 5 5.50
4 2 3 6 7 4.50
5 6 6 7 6 6.25

附加選項

library(tidyverse)
map(my.list, ~mutate(.x, E = rowMeans(.x)))

$S1
  A B C D    E
1 5 2 3 2 3.00
2 6 3 4 3 4.00
3 7 5 5 5 5.50
4 2 3 6 7 4.50
5 6 6 7 6 6.25

$S2
  A B C D    E
1 5 2 3 2 3.00
2 6 3 4 3 4.00
3 7 5 5 5 5.50
4 2 3 6 7 4.50
5 6 6 7 6 6.25

暫無
暫無

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

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