如何将函数应用于R数据框中的每一列

时间:2019-10-31 17:03:28

标签: r dataframe

我想对R中的每一列应用一个函数。假设以下是(3xn)的数据框:

df <- data.frame(
  h1 = c(1,2,3),
  h2 = c(2,3,1),
  h3 = c(3,2,1),
  h4 = c(1,2,3),
  h5 = c(1,2,3)
)
rownames(df) <- c("e1", "e2", "e3")
df
#    h1 h2 h3 h4 h5
# e1  1  2  3  1  1
# e2  2  3  2  2  2
# e3  3  1  1  3  3

如果我们要检查每列(h1,h2 ...)的前两个元素是否假设(e1 == 1,e2 == 2)。我们如何将检查功能应用于数据框中的每一列?

3 个答案:

答案 0 :(得分:3)

根据babel-preset-reactpackage.json对数据行进行分组,将row.names与值向量进行比较,获得逻辑{{1 }}从它派生,并检查它是否等于2,即每列的两个元素是否均为head

==

或者使用colSums,在列matrix上循环,应用函数(匿名函数调用),并从比较中检查TRUE是否为colSums(mat[c("e1", "e2"),] == c(1, 2))==2

apply

答案 1 :(得分:3)

使用@ alex_jwb90的数据,

SELECT

答案 2 :(得分:0)

您可以尝试一下 (如果您删除了& row_number() <= 2,则可以检查两行以上)

library(dplyr)

df = tibble(
  h1 = c(1,2,3),
  h2 = c(2,3,1),
  h3 = c(3,2,1),
  h4 = c(1,2,3),
  h5 = c(1,2,3)
)

df %>%
  mutate_all(
    list(equals_rownum = ~.==row_number() & row_number() <= 2)
  )

如果您不想创建新列<col>_equals_rownum,而是替换h1,h2,...-列,只需在list调用中删除名称即可。