[英]How to add an empty column to a list of dataframes in r
假设我有数据框列表:
#Example data frame columns
Image <- c("001", "001", "001", "001", "001", "001", "001", "001", "001", "001", "001", "001")
Size <- c("Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny")
n <- c(111778, 56, 7099, 3, 3682081, 88, 9078, 7, 198346, 422, 30077, 8)
#make example data frame
data <- data.frame(Image, Size, n)
#Split dataframe into a list of dataframes
df <- split(data, f = data$Image)
df
我如何向此列表中包含的每个数据框添加一个空列(名为 new)。
我试过了
df$new <- NA
但是没有任何错误发生
根据特定条件等,这个问题有更复杂的答案,但我试图简化它却迷路了!
Image <- c("001", "001", "001", "001", "001", "001", "001", "001", "002", "002", "002", "002")
Size <- c("Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny")
n <- c(111778, 56, 7099, 3, 3682081, 88, 9078, 7, 198346, 422, 30077, 8)
data <- data.frame(Image, Size, n)
df <- split(data, f = data$Image)
library(purrr)
library(dplyr)
map(df,function(x) x %>% mutate(New = NA))
$`001`
Image Size n New
1 001 Big 111778 NA
2 001 Small 56 NA
3 001 Medium 7099 NA
4 001 Tiny 3 NA
5 001 Big 3682081 NA
6 001 Small 88 NA
7 001 Medium 9078 NA
8 001 Tiny 7 NA
$`002`
Image Size n New
9 002 Big 198346 NA
10 002 Small 422 NA
11 002 Medium 30077 NA
12 002 Tiny 8 NA
两个问题:
您的n
有一个额外的逗号,
, 将其删除。
您的df
是一个list
,而不是一个框架,因此您不能只使用$
特殊运算符引用其中的一列。 您可以在split
之前添加new
列,也可以将其专门添加到每个拆分框架中。
第一个选项:
data$new <- NA
df <- split(data, f = data$Image)
df
# $`001`
# Image Size n new
# 1 001 Big 111778 NA
# 2 001 Small 56 NA
# 3 001 Medium 7099 NA
# 4 001 Tiny 3 NA
# 5 001 Big 3682081 NA
# 6 001 Small 88 NA
# 7 001 Medium 9078 NA
# 8 001 Tiny 7 NA
# 9 001 Big 198346 NA
# 10 001 Small 422 NA
# 11 001 Medium 30077 NA
# 12 001 Tiny 8 NA
第二个选项,添加到列表中的每个帧:
### original data, without `new`
df <- split(data, f = data$Image)
df <- lapply(df, transform, new = NA)
df
# $`001`
# Image Size n new
# 1 001 Big 111778 NA
# 2 001 Small 56 NA
# 3 001 Medium 7099 NA
# 4 001 Tiny 3 NA
# 5 001 Big 3682081 NA
# 6 001 Small 88 NA
# 7 001 Medium 9078 NA
# 8 001 Tiny 7 NA
# 9 001 Big 198346 NA
# 10 001 Small 422 NA
# 11 001 Medium 30077 NA
# 12 001 Tiny 8 NA
数据
data <- structure(list(Image = c("001", "001", "001", "001", "001", "001", "001", "001", "001", "001", "001", "001"), Size = c("Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny", "Big", "Small", "Medium", "Tiny"), n = c(111778, 56, 7099, 3, 3682081, 88, 9078, 7, 198346, 422, 30077, 8)), row.names = c(NA, -12L), class = "data.frame")
数据来自@Vinícius Félix(非常感谢):
基数 R:
lapply(df, function(x) { x["New_Col"] <- NA; x })
整洁宇宙:
library(purrr)
library(dplyr)
df %>%
map(., ~(.x %>% mutate(New_Col = NA)))
$`001`
Image Size n New_Col
1 001 Big 111778 NA
2 001 Small 56 NA
3 001 Medium 7099 NA
4 001 Tiny 3 NA
5 001 Big 3682081 NA
6 001 Small 88 NA
7 001 Medium 9078 NA
8 001 Tiny 7 NA
$`002`
Image Size n New_Col
9 002 Big 198346 NA
10 002 Small 422 NA
11 002 Medium 30077 NA
12 002 Tiny 8 NA
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.