簡體   English   中英

如何將 function 應用於 R 的 dataframe 中的每一列

[英]how to apply function to each column in dataframe of R

我想將 function 應用於 R 中的每一列。 假設以下是具有 (3xn) 的 dataframe:

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

如果我們要檢查前 2 個元素是否假設 (e1==1, e2==2) 用於每一列 (h1,h2...)。 我們如何將檢查 function 應用於數據框中的每一列?

根據row.nameshead對數據行進行子集,將==與值向量進行比較,獲取從中派生的邏輯matrixcolSums並檢查是否等於 2,即兩個元素是否為TRUE對於每一列

colSums(mat[c("e1", "e2"),] == c(1, 2))==2

或者使用apply ,遍歷列(MARGIN = 2 ),應用 function (匿名 function 調用)並從比較中檢查是否allTRUE

apply(head(mat, 2), 2, function(x) all(x  == c(1, 2)))

使用@alex_jwb90 的數據,

lapply(df, function(a) a[1:2] == 1:2)
# $h1
# [1] TRUE TRUE
# $h2
# [1] FALSE FALSE
# $h3
# [1] FALSE  TRUE
# $h4
# [1] TRUE TRUE
# $h5
# [1] TRUE TRUE

lapply(df, function(a) all(a[1:2] == 1:2))
# $h1
# [1] TRUE
# $h2
# [1] FALSE
# $h3
# [1] FALSE
# $h4
# [1] TRUE
# $h5
# [1] TRUE

sapply(df, function(a) all(a[1:2] == 1:2))
#    h1    h2    h3    h4    h5 
#  TRUE FALSE FALSE  TRUE  TRUE 

你可以試試這個(如果你刪除& 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,...-columns,只需刪除list -call 中的名稱即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM