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