R-将2列数据帧重塑为多列矩阵

R-将2列数据帧重塑为多列矩阵,r,dataframe,matrix,reshape,R,Dataframe,Matrix,Reshape,抱歉,如果这个问题是重复的,但我找不到它 我希望以以下形式重塑数据帧(从read_bulk读入): 形式如下: 5, 4, 1 2, 3, 2 1, 5, 6 真正的数据帧由每个名称的数千个数字组成,我不知道每个名称中的数字,但它们都是相等的。每个名称在最终形式中都是不同的行 我尝试了重塑,但似乎无法实现,有什么想法吗?如果格式总是相同的,在base R中类似于这样 df <- as.data.frame(matrix(unlist(df[, 2]), ncol = 3, byrow =

抱歉,如果这个问题是重复的,但我找不到它

我希望以以下形式重塑数据帧(从read_bulk读入):

形式如下:

5, 4, 1
2, 3, 2
1, 5, 6
真正的数据帧由每个名称的数千个数字组成,我不知道每个名称中的数字,但它们都是相等的。每个名称在最终形式中都是不同的行


我尝试了重塑,但似乎无法实现,有什么想法吗?

如果格式总是相同的,在base R中类似于这样

df <- as.data.frame(matrix(unlist(df[, 2]), ncol = 3, byrow = T));
df;
#  V1 V2 V3
#1  5  4  1
#2  2  3  2
#3  1  5  6

如果格式总是相同的,在base R中是这样的吗

df <- as.data.frame(matrix(unlist(df[, 2]), ncol = 3, byrow = T));
df;
#  V1 V2 V3
#1  5  4  1
#2  2  3  2
#3  1  5  6
使用其他库:

library(tidyverse)
dat%>%group_by(V1)%>%mutate(id2=1:n())%>%spread(id2,V2)
# A tibble: 3 x 4
# Groups:   V1 [3]
      V1   `1`   `2`   `3`
*  <chr> <int> <int> <int>
1 name.a     5     4     1
2 name.b     2     3     2
3 name.c     1     5     6
使用其他库:

library(tidyverse)
dat%>%group_by(V1)%>%mutate(id2=1:n())%>%spread(id2,V2)
# A tibble: 3 x 4
# Groups:   V1 [3]
      V1   `1`   `2`   `3`
*  <chr> <int> <int> <int>
1 name.a     5     4     1
2 name.b     2     3     2
3 name.c     1     5     6

您可以使用
dplyr
重塑2
进行转换:

df <- data.frame(name=c("name.a",
                        "name.a",
                        "name.a",
                        "name.b",
                        "name.b",
                        "name.b",
                        "name.c",
                        "name.c",
                        "name.c"),
                 num=c(5,
                         4,
                         1,
                         2,
                         3,
                         2,
                         1,
                         5,
                         6))

df <- df %>%
  group_by(name) %>%
  mutate(instance = 1:n())

dcast(df,name~instance,sum,value.var='num')
df%
变异(实例=1:n())
dcast(df,name~instance,sum,value.var='num')

您可以使用
dplyr
重塑2
进行转换:

df <- data.frame(name=c("name.a",
                        "name.a",
                        "name.a",
                        "name.b",
                        "name.b",
                        "name.b",
                        "name.c",
                        "name.c",
                        "name.c"),
                 num=c(5,
                         4,
                         1,
                         2,
                         3,
                         2,
                         1,
                         5,
                         6))

df <- df %>%
  group_by(name) %>%
  mutate(instance = 1:n())

dcast(df,name~instance,sum,value.var='num')
df%
变异(实例=1:n())
dcast(df,name~instance,sum,value.var='num')

在查看了回复后,我想我找到了一种更快(更简单)的方法。使用我设法处理的数据:

setwd("~/Documents/Random/abs") # data here
a = read_bulk(directory = ".") # read in as i did
df = unstack(a) # line i was looking for
dat = as.matrix(df) # to matrix
matplot(dat, lty = 1, type = 'l', lwd = 1, xlab = "Energy (keV)", ylab = "Counts") # plot

在查看了这些回复之后,我想我找到了一个更快(更简单)的方法。使用我设法处理的数据:

setwd("~/Documents/Random/abs") # data here
a = read_bulk(directory = ".") # read in as i did
df = unstack(a) # line i was looking for
dat = as.matrix(df) # to matrix
matplot(dat, lty = 1, type = 'l', lwd = 1, xlab = "Energy (keV)", ylab = "Counts") # plot

链接到实际数据我在使用库bulkread中阅读,因为我似乎还不知道如何让这些答案起作用:链接到实际数据我在使用库bulkread中阅读,因为我似乎还不知道如何让这些答案起作用:如果你觉得问题是正确的,你应该使用复选标记接受你自己的答案解决了。嗨,Pdubbs,我试过了,但需要2天的等待才能被接受。我会尽快做。如果你觉得问题解决了,你应该使用复选标记接受你自己的答案。嗨,Pdubbs,我试过了,但需要2天的等待,直到它被接受。我会尽快做的。