[英]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.