簡體   English   中英

跨列表中的多個數據框更改單個列

[英]Changing a Single Column Across Multiple Data Frames in a List

這些問題:

更改 R 中數據框列表中的列名

更改數據框列表中的名稱

兩者都有很好的更改列名的解決方案,但我要更改的唯一列名是第一列。 我列表中的數據框只有第一列是共同的。

這是我遇到的問題的可重現示例:

df1 <- data.frame(A = 1:5, B = 1:5)
df2 <- data.frame(A = 11:15, B = 21:25)
ldf <- list(df1, df2)
ldf <- lapply(ldf, setNames, "State")
L
[[1]]
  State NA
1     1  1
2     2  2
3     3  3
4     4  4
5     5  5

[[2]]
  State NA
1    11 21
2    12 22
3    13 23
4    14 24
5    15 25

如何在 lapply 中指定單個列而其余部分不理會?

我們可以像這樣使用lapply

lapply(ldf, function(x) {names(x)[1] <- "State";x})

#[[1]]
#  State B
#1     1 1
#2     2 2
#3     3 3
#4     4 4
#5     5 5

#[[2]]
#  State  B
#1    11 21
#2    12 22
#3    13 23
#4    14 24
#5    15 25

我們可以使用rename_at

library(purrr)
library(dplyr)
map(ldf, ~ .x %>%
              rename_at(1, ~ "State"))
#[[1]]
#  State B
#1     1 1
#2     2 2
#3     3 3
#4     4 4
#5     5 5

#[[2]]
#  State  B
#1    11 21
#2    12 22
#3    13 23
#4    14 24
#5    15 25

或者用select

map(ldf, ~ .x %>%
             select(State = 1, everything()))

或者使用setnamesdata.table

library(data.table)
lapply(ldf, setnames, old = 1, new = 'State')
ldf
#[[1]]
#  State B
#1     1 1
#2     2 2
#3     3 3
#4     4 4
#5     5 5

#[[2]]
#  State  B
#1    11 21
#2    12 22
#3    13 23
#4    14 24
#5    15 25

或使用base R

lapply(ldf, setNames, c("State", names(ldf[[1]][-1])))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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