我应该使用什么函数来返回字符向量?

时间:2019-04-19 01:37:03

标签: r function if-statement vector

所以我有一个看起来像这样的数据集:

  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]“亚利桑那”“华盛顿”

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以首先选择要为其应用meansd的列。假设您想要以"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开头的所有列传递给比较sdmean的函数,然后返回一个逻辑向量,该逻辑向量从数据帧中选择相关行。 (这假设您的数据帧称为df。)管道操作符和dplyr函数需要select