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

如何同时按名称或其标准差选择列?

骆利
2023-03-14

解决方案

我选择了@thelatemail提供的解决方案,因为我正在努力坚持使用tidyverse,因此dplyr——我还是R的新手,所以我正在迈出小步,并利用帮助库。谢谢大家花时间贡献解决方案。

df_new <- df_inh %>%
select(
  isolate,
  Phenotype,
  which(
    sapply( ., function( x ) sd( x ) != 0 )
  )
)

问题

如果列名为“隔离”或“表型”,或者列值的标准偏差不为0,我将尝试选择列。

我尝试了以下代码

df_new <- df_inh %>%
# remove isolate and Phenotype column for now, don't want to calculate their standard deviation
select(
  -isolate,
  -Phenotype
) %>%
# remove columns with all 1's or all 0's by calculating column standard deviation
select_if(
  function( col ) return( sd( col ) != 0 )
) %>%
# add back the isolate and Phenotype columns
select(
  isolate,
  Phenotype
)

我也试过这个

df_new <- df_inh %>%
select_if(
  function( col ) {
  if ( col == 'isolate' | col == 'Phenotype' ) {
    return( TRUE )
  }
  else {
    return( sd( col ) != 0 )
  }
}
)

我可以通过标准差或列名来选择列,但是我不能同时这样做。

共有2个答案

洪富
2023-03-14

对于这个任务,我根本不会使用tidyverse函数

df_new <- df_inh[,c(grep("isolate", names(df_inh)), 
                    grep("Phenotype", names(df_inh), 
                    which(sapply(df_inh, sd) != 0))]

在上面,您只需使用 [] 使用 grep 的每个条件以及哪个

沃侯林
2023-03-14

不确定是否可以单独使用select_if来执行此操作,但一种方法是组合两个select,然后绑定列。使用mtcars作为样本数据。

library(dplyr)
bind_cols(mtcars %>% select_if(function(x) sum(x) > 1000), 
          mtcars %>% select(mpg, cyl))

#    disp  hp  mpg cyl
#1  160.0 110 21.0   6
#2  160.0 110 21.0   6
#3  108.0  93 22.8   4
#4  258.0 110 21.4   6
#5  360.0 175 18.7   8
#6  225.0 105 18.1   6
#7  360.0 245 14.3   8
#8  146.7  62 24.4   4
#....

但是,如果列同时满足条件(在select_if中被选中以及select),则该列将被重复。

我们也可以使用base R,它给出相同的输出,但使用<code>unique

sel_names <- c("mpg", "cyl")
mtcars[unique(c(sel_names, names(mtcars)[sapply(mtcars, sum) > 1000]))]

因此,对于您的情况,两个版本将是:

bind_cols(df_inh %>% select_if(function(x) sd(x) != 0), 
          df_inh %>% select(isolate, Phenotype))

sel_names <- c("isolate", "Phenotype")
df_inh[unique(c(sel_names, names(df_inh)[sapply(df_inh, sd) != 0]))]
 类似资料:
  • 是否有任何方法可以在数据框中按索引(即整数)选择行,按列名选择列? 我尝试使用loc,但它返回一个错误,我知道iloc只适用于索引。 这是数据帧df的第一行。我愿意选择第一行,名为“Volume”的列,并尝试使用df.loc[0,'Volume']

  • 我对标准差的计算有点执着,如果你能在下面的两个问题上给我一些帮助,那就太好了。 代码 问题1:我如何计算这个的标准误差(平均值的标准偏差)? 代码 问题2:如何计算累积标准偏差? 非常感谢!!(很抱歉数据格式错误!)

  • 本文向大家介绍MySQL 按列名选择,包括了MySQL 按列名选择的使用技巧和注意事项,需要的朋友参考一下 示例 询问 结果            

  • 问题内容: 我有这样的桌子 和包含年和月行的表 如何从的更改中选择 ? 我输入这个查询 #1064-您的SQL语法有误;检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的’SELECT CONCAT(’changes’,year,month)FROM changes)’附近使用 问题答案: 您打开1 并关闭2 。删除最后一个: 编辑 第二个语句应该是 那行得通,但是不确定那是否

  • 问题内容: 我有一个像这样的excel文件: 如您所见,两列的标题具有相同的名称 -Name 2 。 我的问题是,是否可以告诉ADO引擎从哪一列中选择数据? 目前,我的选择如下所示: ADO从excel中的列下列出的列中提取数据。换句话说,它采用具有给定名称的第一列。不幸的是,我有两个具有相同名称的列,我想从column中提取数据。是否有可能? 我找不到任何通过其索引而不是名称来选择列的方法。 问

  • 问题内容: 我正在使用ADO从Excel工作簿导入数据。我在一个工作表上遇到麻烦,其中一个列名包含一个点:“ Col.1”。 我尝试了所有发现的东西:双引号,方括号,后卫。什么都行不通。会引发错误,或者在每行上查询输出“ Col.1”。 鉴于我无法重命名源文件中的列, 如何使用其名称而不是其编号([F1])手动选择此列? 问题答案: 我终于找到了如何从此列中检索数据。 您需要 替换“。” 按“#”