【问题标题】:Pulling specific columns from a list of data frames using a function and lapply使用函数和 lapply 从数据框列表中提取特定列
【发布时间】:2017-03-01 19:52:26
【问题描述】:

我有一个名为 StatesList 的数据框列表(它是一个状态列表),我试图从每个列中提取两列,对其求和,然后返回总和。这是我目前所拥有的:

StatesList <- list(Alabam, Alask, Arizon, Arkansa, Californi, Colorado, Connecticu, Delawar, District_ColUmbi, Florid, Georgi, Hawai, Idah, Illinoi, Indian, Iow, Kansa, Kentuck, Louisian, Main, Marylan, Massachusett, Michiga, Minnesot, Mississipp, Missour, Montan, Nebrask, Nevad, New_Hamp, New_Jer, New_Mex, New_York, North_Carol, North_Dak, Ohi, Oklahom, Orego, Pennsylvani, Rhode_Isl, South_Carol, South_Dak, Tennesse, Texa, Uta,Vermon, Virgini, Washingto, West_Vir, Wisconsi, Wyomin )

my_function <- function(x) {

  c <- sum(x + $Clinton_Weighted)
  t <- sum(x + $Trump_Weighted)
  ans <- list(Clinton = c, Trump = t)
  return(print(ans))
}

lapply(StatesList, my_function(x))

我知道x + $Clinton_Weighted 不起作用,但我不确定什么会起作用。 如何在函数代码中提取特定列?并且尝试将每个列表的名称与 $ 和所需的列结合起来是个坏主意吗?

【问题讨论】:

  • 我想是的,如果所有列的成对总和意味着从列表中打印出的每个状态的两列的总和。
  • 对不起,我不确定你所说的代码是什么意思。 (我对 R 不是超级有经验)但是期望的输出看起来像这样:[1] #for alabama Clinton Trump 87.5 78.4 [2] #for alaska Clinton Trump 67.5 98.4。 . .一直在状态列表中。这有帮助吗?
  • [1] #for alabama Clinton Trump 57.5, 48.4 [2] #for alaska Clinton Trump 27.5, 68.4 . . . 其中数字是列表内数据框内的列的总和。
  • 很公平,对此感到抱歉。我会尝试弄清楚如何做到这一点,并在这里举一个例子。
  • 您为sum 考虑的两列在所有州是否都相同,如果是,您可以将列名称传递给函数my_function &lt;- function(x="Alabama",colName1="alpha") { c &lt;- sum(x[,colName1] + x[,"Clinton_Weighted"] ...) }

标签: r list function lapply


【解决方案1】:

这是一个使用lapplyapply 组合的简单方法:

# Create sample data
cols = list(Clinton = 1:10, Trump = 10:1, SomeoneElse = 21:30)

Alabama = data.frame(cols)
Alaska = data.frame(cols)
Arison = data.frame(cols)
Arkansa = data.frame(cols)
Californi = data.frame(cols)

df_list = list(Alabama, Alaska, Arison, Arkansa, Californi)

数据框列表如下所示:

df_list
[[1]]
   Clinton Trump SomeoneElse
1        1    10          21
2        2     9          22
3        3     8          23
4        4     7          24
5        5     6          25
6        6     5          26
7        7     4          27
8        8     3          28
9        9     2          29
10      10     1          30

[[2]]
   Clinton Trump SomeoneElse
1        1    10          21
2        2     9          22
3        3     8          23
4        4     7          24
5        5     6          25
6        6     5          26
7        7     4          27
8        8     3          28
9        9     2          29
10      10     1          30

[[3]]
   Clinton Trump SomeoneElse
1        1    10          21
2        2     9          22
3        3     8          23
4        4     7          24
5        5     6          25
6        6     5          26
7        7     4          27
8        8     3          28
9        9     2          29
10      10     1          30

[[4]]
   Clinton Trump SomeoneElse
1        1    10          21
2        2     9          22
3        3     8          23
4        4     7          24
5        5     6          25
6        6     5          26
7        7     4          27
8        8     3          28
9        9     2          29
10      10     1          30

[[5]]
   Clinton Trump SomeoneElse
1        1    10          21
2        2     9          22
3        3     8          23
4        4     7          24
5        5     6          25
6        6     5          26
7        7     4          27
8        8     3          28
9        9     2          29
10      10     1          30

现在总结数据框的列,并将其应用于数据框列表:

# Choose the columns to extract the sum of
cols = c("Clinton", "Trump")

lapply(df_list, function(x) apply(x[cols], 2, sum))

下面是返回列表

[[1]]
Clinton   Trump 
     55      55 

[[2]]
Clinton   Trump 
     55      55 

[[3]]
Clinton   Trump 
     55      55 

[[4]]
Clinton   Trump 
     55      55 

[[5]]
Clinton   Trump 
     55      55 

【讨论】:

  • @Travasaurus 这是想要的输出吗?
  • 如果我想得到每个数据帧的总和,但是作为一个具有 (10x1) 的向量,每个数据帧的所有行的总和。我尝试使用 rowSums,但它需要一个数组并且我被卡住了。
猜你喜欢
  • 2022-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
  • 1970-01-01
相关资源
最近更新 更多