所以我有一个看起来像这样的数据集:
state.x77[1,]
人口收入文盲生活支出谋杀案HS Grad Frost 3615.00 3624.00 2.10 69.05 15.10 41.30 20.00 区域 50708.00
as.numeric(state.x77 [1,]) [1] 3615.00 3624.00 2.10 69.05 15.10 41.30 20.00 50708.00
我想要看起来像这样的东西: `[1]“亚利桑那”“华盛顿”
谢谢!
答案 0 :(得分:2)
您可以首先选择要为其应用mean
和sd
的列。假设您想要以"P"
结尾的列。然后计算逐行sd
和逐行mean
并比较这些值并返回相应的gene_symbol
。
cols <- grep("P$", names(df))
df$gene_symbol[apply(df[cols],1,sd, na.rm = TRUE) > rowMeans(df[cols],na.rm = TRUE)]
要计算sd
,我们还可以使用rowSds
包中的matrixStats
函数
library(matrixStats)
df$gene_symbol[rowSds(as.matrix(df[cols]), na.rm = TRUE) >
rowMeans(df[cols], na.rm = TRUE)]
答案 1 :(得分:2)
这是一个purrr
解决方案:
df[pmap_lgl(df %>% select(starts_with("L0")), ~sd(c(...))>mean(c(...))), "gene_symbol"]
这会将以L0
开头的所有列传递给比较sd
和mean
的函数,然后返回一个逻辑向量,该逻辑向量从数据帧中选择相关行。 (这假设您的数据帧称为df
。)管道操作符和dplyr
函数需要select
。