应用于多个数据框中的每一列
Apply to each column in multiple dataframes
如果我要找到每一列的 class,我通常会(假设我想避免 str
):
lapply(df, class)
但是,如果我想对多个数据帧执行相同的操作怎么办?例如:
x <- data.table(col_1 = c('a', 'b')
, col_2 = 1:2
); x
y <- data.table(col_3 = 3:4
, col_4 = c('c', 'd')
); y
我的尝试是:
lapply(1:2, function(i) class( list(x,y)[[i]] ) )
但它给出:
[[1]]
[1] "data.table" "data.frame"
[[2]]
[1] "data.table" "data.frame"
即R
无法应用于列表中每个元素(在本例中为每个数据框)内的列。如果我追求 apply
解决方案(尤其不是 For loop
或 str
),那会是什么?
或者 Reduce
、Map
或 do.call
也能做到这一点吗?
谢谢。
将数据表放入列表中,然后使用 lapply
对其进行迭代。
lapply(list(x, y), function(x) sapply(x, class))
#[[1]]
# col_1 col_2
#"character" "integer"
#[[2]]
# col_3 col_4
# "integer" "character"
由于x
和y
继承自列表,它们可以连接起来,因此您可以使用
lapply(c(x,y), class)
# $col_1
# [1] "character"
#
# $col_2
# [1] "integer"
#
# $col_3
# [1] "integer"
#
# $col_4
# [1] "character"
我们可以使用
library(purrr)
map(c(x, y), class)
$col_1
[1] "character"
$col_2
[1] "integer"
$col_3
[1] "integer"
$col_4
[1] "character"
我们可以使用基数 R
Map
:
Map(class,c(x,y))
$col_1
[1] "character"
$col_2
[1] "integer"
$col_3
[1] "integer"
$col_4
[1] "character"
如果我要找到每一列的 class,我通常会(假设我想避免 str
):
lapply(df, class)
但是,如果我想对多个数据帧执行相同的操作怎么办?例如:
x <- data.table(col_1 = c('a', 'b')
, col_2 = 1:2
); x
y <- data.table(col_3 = 3:4
, col_4 = c('c', 'd')
); y
我的尝试是:
lapply(1:2, function(i) class( list(x,y)[[i]] ) )
但它给出:
[[1]]
[1] "data.table" "data.frame"
[[2]]
[1] "data.table" "data.frame"
即R
无法应用于列表中每个元素(在本例中为每个数据框)内的列。如果我追求 apply
解决方案(尤其不是 For loop
或 str
),那会是什么?
或者 Reduce
、Map
或 do.call
也能做到这一点吗?
谢谢。
将数据表放入列表中,然后使用 lapply
对其进行迭代。
lapply(list(x, y), function(x) sapply(x, class))
#[[1]]
# col_1 col_2
#"character" "integer"
#[[2]]
# col_3 col_4
# "integer" "character"
由于x
和y
继承自列表,它们可以连接起来,因此您可以使用
lapply(c(x,y), class)
# $col_1
# [1] "character"
#
# $col_2
# [1] "integer"
#
# $col_3
# [1] "integer"
#
# $col_4
# [1] "character"
我们可以使用
library(purrr)
map(c(x, y), class)
$col_1
[1] "character"
$col_2
[1] "integer"
$col_3
[1] "integer"
$col_4
[1] "character"
我们可以使用基数 R
Map
:
Map(class,c(x,y))
$col_1
[1] "character"
$col_2
[1] "integer"
$col_3
[1] "integer"
$col_4
[1] "character"