在基数 r 中执行此操作的一种肮脏方法是将每个公司的销售额循环转置并转换回 data.frame。
lst = list()
i <- 1
for (name in unique(df$Company)){
lst[[i]] <- data.frame(t(df[df$Company == name, 'Sales']))
i <- i + 1
}
out <- cbind(unique(df$Company), Reduce(rbind, lst))
colnames(out) <- c(colnames(df)[1], unique(df$Product))
out
编辑:这是一个包装上一个答案的函数。
convwide <- function(data, by, datcol, namcol){
lst = list()
i <- 1
for (name in unique(df[[by]])){
lst[[i]] <- data.frame(t(df[df[[by]] == name, datcol]))
i <- i + 1
}
out <- cbind(unique(df[[by]]), Reduce(rbind, lst))
colnames(out) <- c(by, unique(df[[namcol]]))
return(out)
}
convwide(df, 'Company', 'Sales', 'Product')