将列转换为行重复公共值
Convert columns to rows repeat common values
好人,我有一个数据框,我想将其从 dataframe1 转换为 dataframe2:
dataframe1 <- data.frame(Company_Name = c("KFC", "McD"),
Company_ID = c(1, 2),
Company_Phone = c("237389", "237002"),
Employee = c("John", "Joshua" ),
ID = c(1001, 2001),
Employee = c("Mary", "Anne"),
ID = c(1002, 2002),
Employee = c("Jane", ""),
ID = c(1003, ""))
dataframe2 <- data.frame(Company_Name = c("KFC", "KFC", "KFC", "McD", "McD"),
Company_ID = c(1, 1, 1, 2, 2),
Company_Phone = c("237389", "237389", "237389", "237002", "237002"),
Employee = c("John", "Mary", "Jane", "Joshua",
"Anne"),
ID = c(1001, 1002, 1003, 2001, 2002))
到目前为止我尝试了什么:
cbind(dataframe1[1], stack(dataframe1[-1]))
和
stack(dataframe2)
没有得到所需的输出。任何帮助或见解将不胜感激。
使用 data.table
中的 melt
,使用模式函数
library(data.table)
melt(setDT(dataframe1),measure = patterns("^Employee","^ID"),value.name = c("Employee","Employee_ID"))[Employee != ""]
Company_Name Company_ID Company_Phone variable Employee Employee_ID
1: KFC 1 237389 1 John 1001
2: McD 2 237002 1 Joshua 2001
3: KFC 1 237389 2 Mary 1002
4: McD 2 237002 2 Anne 2002
5: KFC 1 237389 3 Jane 1003
好人,我有一个数据框,我想将其从 dataframe1 转换为 dataframe2:
dataframe1 <- data.frame(Company_Name = c("KFC", "McD"),
Company_ID = c(1, 2),
Company_Phone = c("237389", "237002"),
Employee = c("John", "Joshua" ),
ID = c(1001, 2001),
Employee = c("Mary", "Anne"),
ID = c(1002, 2002),
Employee = c("Jane", ""),
ID = c(1003, ""))
dataframe2 <- data.frame(Company_Name = c("KFC", "KFC", "KFC", "McD", "McD"),
Company_ID = c(1, 1, 1, 2, 2),
Company_Phone = c("237389", "237389", "237389", "237002", "237002"),
Employee = c("John", "Mary", "Jane", "Joshua",
"Anne"),
ID = c(1001, 1002, 1003, 2001, 2002))
到目前为止我尝试了什么:
cbind(dataframe1[1], stack(dataframe1[-1]))
和
stack(dataframe2)
没有得到所需的输出。任何帮助或见解将不胜感激。
使用 data.table
中的 melt
,使用模式函数
library(data.table)
melt(setDT(dataframe1),measure = patterns("^Employee","^ID"),value.name = c("Employee","Employee_ID"))[Employee != ""]
Company_Name Company_ID Company_Phone variable Employee Employee_ID
1: KFC 1 237389 1 John 1001
2: McD 2 237002 1 Joshua 2001
3: KFC 1 237389 2 Mary 1002
4: McD 2 237002 2 Anne 2002
5: KFC 1 237389 3 Jane 1003