在 R 多列中转置数据框
Transpose dataframe in R multiple columns
我有一个如下所示的数据框:
x <- c('Jim', 'Jim', 'Jim', 'Sue', 'Sue', 'Sue')
y <- c(100, 200, 150, 40, 50, 30)
z <- c(5, 6, 4, 3, 4, 4)
num <- c(1, 2, 3, 1, 2, 3)
df <- data.frame(x,y,z,num)
我需要转置它,这样我就有一行给吉姆,一行给苏,值为 y1、y2、y3、z1、z2、z3。
我知道如何使用 data.table::dcast
执行此操作,但我使用的 Linux 服务器无法加载此包。因此,我正在尝试使用 reshape
包甚至只是 reshape()
函数来实现它,但是 运行 遇到了困难。
# This gives the desired result
df1 <- data.table::dcast(setDT(df), x ~ num, value.var=c('y', 'z'))
# Trying to figure out what I'm missing here...
df2 <- reshape::cast(df, num ~ x, value = c('y', 'z'))
诚然,我对 data.table
不是很了解,并且 reshape2
有一些时髦的语法(至少在我看来是这样)需要一些时间来学习。
我不得不 melt()
将您的数据框转换为更好的格式,然后使用 dcast()
获得最终输出。
library(reshape2)
> df %>%
+ melt(id.vars = c("x", "num"), measure.vars = c("y", "z")) %>%
+ dcast(x ~ paste0(.$variable, .$num), value.var = "value")
x y1 y2 y3 z1 z2 z3
1 Jim 100 200 150 5 6 4
2 Sue 40 50 30 3 4 4
好吧,也许下次使用来自 base r:
的 aggregate
aggregate(.~x,df[-4],I)
x y.1 y.2 y.3 z.1 z.2 z.3
1 Jim 100 200 150 5 6 4
2 Sue 40 50 30 3 4 4
我有一个如下所示的数据框:
x <- c('Jim', 'Jim', 'Jim', 'Sue', 'Sue', 'Sue')
y <- c(100, 200, 150, 40, 50, 30)
z <- c(5, 6, 4, 3, 4, 4)
num <- c(1, 2, 3, 1, 2, 3)
df <- data.frame(x,y,z,num)
我需要转置它,这样我就有一行给吉姆,一行给苏,值为 y1、y2、y3、z1、z2、z3。
我知道如何使用 data.table::dcast
执行此操作,但我使用的 Linux 服务器无法加载此包。因此,我正在尝试使用 reshape
包甚至只是 reshape()
函数来实现它,但是 运行 遇到了困难。
# This gives the desired result
df1 <- data.table::dcast(setDT(df), x ~ num, value.var=c('y', 'z'))
# Trying to figure out what I'm missing here...
df2 <- reshape::cast(df, num ~ x, value = c('y', 'z'))
诚然,我对 data.table
不是很了解,并且 reshape2
有一些时髦的语法(至少在我看来是这样)需要一些时间来学习。
我不得不 melt()
将您的数据框转换为更好的格式,然后使用 dcast()
获得最终输出。
library(reshape2)
> df %>%
+ melt(id.vars = c("x", "num"), measure.vars = c("y", "z")) %>%
+ dcast(x ~ paste0(.$variable, .$num), value.var = "value")
x y1 y2 y3 z1 z2 z3
1 Jim 100 200 150 5 6 4
2 Sue 40 50 30 3 4 4
好吧,也许下次使用来自 base r:
的aggregate
aggregate(.~x,df[-4],I)
x y.1 y.2 y.3 z.1 z.2 z.3
1 Jim 100 200 150 5 6 4
2 Sue 40 50 30 3 4 4