[英]recode/replace multiple values in a shared data column to a single value across data frames
[英]Changing a Single Column Across Multiple Data Frames in a List
這些問題:
兩者都有很好的更改列名的解決方案,但我要更改的唯一列名是第一列。 我列表中的數據框只有第一列是共同的。
這是我遇到的問題的可重現示例:
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()))
或者使用setnames
的data.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.