[英]In R, how to apply a function on each dataframe row that uses a column value?
[英]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.names
或head
對數據行進行子集,將==
與值向量進行比較,獲取從中派生的邏輯matrix
的colSums
並檢查是否等於 2,即兩個元素是否為TRUE
對於每一列
colSums(mat[c("e1", "e2"),] == c(1, 2))==2
或者使用apply
,遍歷列(MARGIN = 2
),應用 function (匿名 function 調用)並從比較中檢查是否all
為TRUE
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.