[英]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
來組合每個employee
的plant
值。
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.