簡體   English   中英

按列重組 R 中的 dataframe

[英]Reorganizing a dataframe in R by columns

我是編碼新手,我真的不知道要谷歌/搜索什么,因為我找不到適合此操作的名稱。 很抱歉,如果我的問題措辭不佳,我仍然不熟悉正確的術語。 關於我的問題:我有一個結構如下的數據集:

plant <-  c("A", "B", "C", "D")
employee <- c("Peter, Mark", "Mark", "Peter", "Steven")
df <- data.frame(plant, employee)

  plant    employee
1     A Peter, Mark
2     B        Mark
3     C       Peter
4     D      Steven

我現在想由員工“重組” dataframe,所以它看起來像這樣:

  employee plant
1    Peter  A, C
2     Mark  A, B
3    Maria     A
4   Steven     C

對於在哪里尋找方向或解決方案,我真的很無助,我將不勝感激。 這在基礎 R 中是否可行?

我們可以使用separate_rows來拆分'employee',列,然后按'employee'分組, paste 'plant'

library(dplyr)
library(tidyr)
df %>% 
  separate_rows(employee) %>%
  group_by(employee) %>% 
  summarise(plant = toString(plant))

如果我們需要使用base R ,一個選項是使用strsplit將 'employee' 列拆分為vector list ,使用 'plant' 列設置list的名稱,將命名list轉換為兩列 data.frame使用stack並使用aggregate通過paste進行分組( toString - paste(..., collapse=", ")

aggregate(ind ~ values, stack(setNames(strsplit(as.character(df$employee),
            ",\\s*"), df$plant)), toString)

使用基礎 R,我們可以拆分employee"," ,並根據它重復plant值。 我們可以使用tapply來組合每個employeeplant值。

temp <- strsplit(df$employee, ",", fixed = TRUE)
stack(tapply(rep(df$plant, lengths(temp)), trimws(unlist(temp)), toString))


#  values    ind
#1   A, B   Mark
#2   A, C  Peter
#3      D Steven

暫無
暫無

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

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