簡體   English   中英

如何將空列添加到 r 中的數據框列表

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

兩個問題:

  1. 您的n有一個額外的逗號, , 將其刪除。

  2. 您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM