R-将2列数据帧重塑为多列矩阵
抱歉,如果这个问题是重复的,但我找不到它 我希望以以下形式重塑数据帧(从read_bulk读入): 形式如下: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 =
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天的等待,直到它被接受。我会尽快做的。