当前位置: 首页 > 知识库问答 >
问题:

R:使用data.frame中的值使用lapply对列表元素进行子集

章安宜
2023-03-14
set.seed(1)
df <- data.frame(year=c("x00", "x01", "x02", "x03", "x04", "x05"), 
                               mean=c(12, 10, 13, 10, 9, 11), 
                               sd=c(1, 2, 3, 1, 3, 2))
normv <- function( n , mean , sd ){
        out <- rnorm( n*length(mean) , mean = mean , sd = sd )
        return( matrix( out , , ncol = n , byrow = FALSE ) )
        }
com1 <- round(normv( 10 , df$mean , df$sd ),0)
row.names(com1) <- df$year
colnames(com1) <- c("sp1", "sp2", "sp3", "sp4", 
    "sp5", "sp6", "sp7", "sp8", "sp9", "sp10")

com2 <- round(normv( 10 , df$mean , df$sd ),0)
row.names(com2) <- df$year
colnames(com2) <- c("sp1", "sp2", "sp3", "sp4", "sp5", 
    "sp6", "sp7", "sp8", "sp9", "sp10")

com3 <- round(normv( 10 , df$mean , df$sd ),0)
row.names(com3) <- df$year
colnames(com3) <- c("sp1", "sp2", "sp3", "sp4", "sp5", 
    "sp6", "sp7", "sp8", "sp9", "sp10")

com.list <- list(com1, com2, com3)

years <- data.frame(rbind(c("x00", "x01", "x02"), c("x03", "x04", "x05"), 
    c("x02", "x03", "x05")))
colnames(years) <- c("com1", "com2", "com3")
library(data.table)
lapply(com.list, function(x){
    x.sub <- data.table::setDT(data.frame(x))[
        row.names(x) %chin% as.character(years[,x])]
    return(x.sub)
}

共有1个答案

蒙胤
2023-03-14

如果我们希望根据相应的“年份”列进行子集,那么我们可以使用映射基r

Map(function(x, y) subset(x, row.names(x) %in% y), com.list, years)

如果我们想使用lapply,那么循环查看列表的序列,然后在此基础上子集“years”和“com.list”

lapply(seq_along(com.list), function(i) {
          dat <- com.list[[i]]
          subset(dat, row.names(dat) %in% years[,i])
 })

tidyverse选项为

library(tidyverse)
map2(com.list, years, ~  .x %>%
                           as.data.frame %>% 
                           filter(row.names(.) %in% .y))
 类似资料:
  • 本文向大家介绍如何在R中对列表的一个或多个子元素进行子集化?,包括了如何在R中对列表的一个或多个子元素进行子集化?的使用技巧和注意事项,需要的朋友参考一下 列表包含不同类型的元素,并且每个元素可以具有不同的元素。为了子集这些子元素,我们可以使用sapply函数,并使用c子集相应子元素的数量。例如,如果我们有一个包含五个元素的列表,并且每个元素都有十个子元素,则可以从子元素中提取1、2、3等元素。

  • 问题内容: 我想使用Python比较列表中的每个可能的对。 假设我有 我想对列表中2个元素的每个组合进行操作(我们称其为foo)。 最终结果应与 我的第一个想法是手动遍历列表两次,但这似乎不是很Python。 问题答案: 在模块中签出。它完全符合您的描述。 这等效于: 编辑: 有两个非常相似的功能,以及,和。为了说明它们之间的区别: 生成所有可能的元素对,包括所有重复项: 生成每个唯一元素对的所有

  • 我已经使用json响应创建了一个HashMap,我希望按月使用它的数据组。 我的json 对象类

  • 本文向大家介绍如何在R中按降序对包含单个子元素的列表进行排序?,包括了如何在R中按降序对包含单个子元素的列表进行排序?的使用技巧和注意事项,需要的朋友参考一下 就像列表可以具有多个元素一样,列表的元素可以具有多个子元素,并且这些元素的大小也可以变化,因此具有单个子元素的列表也是可能的。如果我们有这种类型的列表,则可以使用order函数以递减的顺序对该列表进行排序,但是我们还需要取消列出那些元素。

  • 我正在为android应用程序定位元素,并有一个查询。我存储的web元素列表如下 但这并不奏效。非常感谢任何帮助。

  • 我正在与熊猫的df与有关netflix节目的信息。其中一列是一个字符串,其中包含所有参与生产的国家。我使用以下代码创建了一个附加列,该列旨在列出所有单个国家(因为有涉及多个国家的联合制作),名为: 之后,我尝试创建一个名为的新列,通过执行以下操作,该列包含了列列表中的国家数: 然而,我得到了以下错误:typeerror:“float”类型的对象没有len() 这对我来说没有意义,因为列中填充的是列