如何在 r 中的列表中 select 列跨数据框
How to select column across data frame in a list in r
在确信使用列表管理 R 中的多个数据框是最佳实践后,我决定将所有具有相同列名的数据框放入列表中。
示例列表:
#create sample df
df_1 <- data.frame(item = c("a", "b", "c"),
measure = c(1,2,3)
)
df_2 <- data.frame(item = c("x", "y", "z"),
measure = c(4,5,6)
)
#use names as my df has names
data_list <- list(df_1 = df_1, df_2 = df_2)
我想对这些数据帧执行相同的操作,但我不希望将它们合并为一个数据帧,因为稍后我需要将每个数据帧保存到单独的输出中。
然后它变成了一场噩梦,因为我不知道如何在列表中的所有数据框中操作列。
虽然我们可以 select 列表中的特定元素和特定 df,但我们如何 select 按列名?
举个例子,我需要将 item
列中的值更改为大写。在数据框中我会做
df_1 <- df_1 %>% mutate(item = toupper(item))
我仍在学习编写函数和使用 R 中的 apply 系列。对于这个简单的任务,我相信我可以像这样使用 lapply 中的现有函数
data_list = lapply(x, toupper)
问题是这里的x是什么?有没有办法按列子集?喜欢data_list$df_1
或者data_list[1]
可以给我整df_1.
我希望我可以使用 lapply 和函数在列表中跨数据框逐列处理。
另一种选择是使用 purrr
中的 map
。因此,如果您已经为列表中的一个数据框编写了要执行的操作,那么您可以将其作为函数放入 map
中。您使用 .x
而不是指定特定的数据帧。
library(tidyverse)
map(data_list, ~ .x %>%
mutate(item = toupper(item)))
输出
$df_1
item measure
1 A 1
2 B 2
3 C 3
$df_2
item measure
1 X 4
2 Y 5
3 Z 6
在确信使用列表管理 R 中的多个数据框是最佳实践后,我决定将所有具有相同列名的数据框放入列表中。
示例列表:
#create sample df
df_1 <- data.frame(item = c("a", "b", "c"),
measure = c(1,2,3)
)
df_2 <- data.frame(item = c("x", "y", "z"),
measure = c(4,5,6)
)
#use names as my df has names
data_list <- list(df_1 = df_1, df_2 = df_2)
我想对这些数据帧执行相同的操作,但我不希望将它们合并为一个数据帧,因为稍后我需要将每个数据帧保存到单独的输出中。
然后它变成了一场噩梦,因为我不知道如何在列表中的所有数据框中操作列。
虽然我们可以 select 列表中的特定元素和特定 df,但我们如何 select 按列名?
举个例子,我需要将 item
列中的值更改为大写。在数据框中我会做
df_1 <- df_1 %>% mutate(item = toupper(item))
我仍在学习编写函数和使用 R 中的 apply 系列。对于这个简单的任务,我相信我可以像这样使用 lapply 中的现有函数
data_list = lapply(x, toupper)
问题是这里的x是什么?有没有办法按列子集?喜欢data_list$df_1
或者data_list[1]
可以给我整df_1.
我希望我可以使用 lapply 和函数在列表中跨数据框逐列处理。
另一种选择是使用 purrr
中的 map
。因此,如果您已经为列表中的一个数据框编写了要执行的操作,那么您可以将其作为函数放入 map
中。您使用 .x
而不是指定特定的数据帧。
library(tidyverse)
map(data_list, ~ .x %>%
mutate(item = toupper(item)))
输出
$df_1
item measure
1 A 1
2 B 2
3 C 3
$df_2
item measure
1 X 4
2 Y 5
3 Z 6