簡體   English   中英

如何擺脫 R 中具有相同名稱的多個列?

[英]How do I get rid of multiple columns with the same name in R?

我正在收集德克薩斯州各學區的 SAT 分數及其教育支出金額。 SAT 分數的數據來自按年份拆分的 csv 文件。 我想將分數合並到我的數據框中,該數據框具有教育支出金額,而無需為總計、數學分數、閱讀分數等創建多個列。

我嘗試了不同類型的連接函數, semi_joinfull_joinleft_join等,但這些似乎都無法解決我遇到的問題。

temp1<-left_join(temp, sat17, by= c("District","year"))%>% 

left_join(., sat16, by=c("District","year"))%>%

left_join(., sat15, by=c("District","year"))%>%

left_join(., sat14, by=c("District","year"))%>%

left_join(., sat13, by=c("District","year"))%>%

left_join(., sat12, by=c("District","year"))%>%

left_join(., sat11, by=c("District","year"))

輸出為每個連接的數據幀提供 Math.x、Math.y、Total.x、Total.y 等列。 此外,sat17 包括一個名為 ERW 的專欄,而不是 Reading,因為那一年的測試發生了變化。 我想將 ERW 分開,其余的閱讀、數學和總分排在每一列的下面。

我認為你想要做的是將它們綁定在一起......也就是說將它們“添加”到另一個之上。

嘗試:

do.call(rbind, dfs) # dfs is the list of dataframes

或使用purrr

library(purrr)
bind_rows(dfs, .id = NULL)

或者說您只想將它們綁定到 .csv 級別開始,只需將所有文件放入名為“數據”的子目錄中即可。 你可以嘗試這樣的事情:

setwd("./data/")
library(purrr)
library(tidyverse)
binded_data <- tibble(filenames = list.files()) %>%
  mutate(yearly_sat = map(filenames, read_csv)) %>%
  unnest()

解釋

dplyr會自動重命名您沒有加入的任何列,並且在加入的數據集中具有匹配的列名。

在您的情況下,由於您只想加入by=c("District", "year") ,因此任何其他具有相同名稱的列都將被重命名。

起始數據集的列將.x附加到其名稱的末尾,而左連接的列將.y附加到其名稱的末尾。

解決方案

如果您想將數學、閱讀和總計全部放在同一列中,則需要使用dplyr::bind_rows()將數據集堆疊在一起

combined_sat <- dplyr::bind_rows(sat17, sat16, sat15, sat14, sat13, sat12,  sat11)

暫無
暫無

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

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