【问题标题】:What function should I use to return a vector of characters?我应该使用什么函数来返回字符向量?
【发布时间】:2019-09-09 08:29:29
【问题描述】:
所以我有一个如下所示的数据集:
state.x77[1,]
人口收入文盲生活经验谋杀高中毕业生弗罗斯特
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] “亚利桑那” “华盛顿”
谢谢!
【问题讨论】:
标签:
r
function
if-statement
vector
【解决方案1】:
这是purrr 解决方案:
df[pmap_lgl(df %>% select(starts_with("L0")), ~sd(c(...))>mean(c(...))), "gene_symbol"]
这会将所有以L0 开头的列传递给一个比较sd 和mean 的函数,然后返回一个逻辑向量,该向量从数据框中选择相关行。 (假设您的数据框名为 df。)管道运算符和 select 函数需要 dplyr。
【解决方案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,我们也可以使用matrixStats包中的rowSds函数
library(matrixStats)
df$gene_symbol[rowSds(as.matrix(df[cols]), na.rm = TRUE) >
rowMeans(df[cols], na.rm = TRUE)]