所以我有这个数据:
mass value
1 2390.421 0.0001376894
2 2390.713 0.0001362054
3 2391.004 0.0001346138
4 2391.296 0.0001329289
5 2391.588 0.0001311646
6 2391.879 0.0001293351我需要的是质量值变成列名:
2390.421 2390.713 2391.004 .....
0.0001376894 0.0001362054 0.0001346138 .....我试过重塑,打开,do.call,但我还是做不到。
我能做什么?
发布于 2021-01-15 21:03:13
那么dplyr解决方案呢:
library(tidyverse)
df1 %>% pivot_wider(names_from = a, values_from = b)
# A tibble: 1 x 6
`2390.421` `2390.713` `2391.004` `2391.296` `2391.588` `2391.879`
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0.000138 0.000136 0.000135 0.000133 0.000131 0.000129发布于 2021-01-15 21:00:27
我们可以使用来自transpose的data.table
data.table::transpose(df1, make.names = 'mass')
# 2390.421 2390.713 2391.004 2391.296 2391.588 2391.879
#1 0.0001376894 0.0001362054 0.0001346138 0.0001329289 0.0001311646 0.0001293351或使用deframe/as_tibble_row
library(tibble)
library(dplyr)
deframe(df1) %>%
as_tibble_row
# A tibble: 1 x 6
# `2390.421` `2390.713` `2391.004` `2391.296` `2391.588` `2391.879`
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 0.000138 0.000136 0.000135 0.000133 0.000131 0.000129或者使用来自base R的base R
xtabs(value ~ mass, df1)
#mass
# 2390.421 2390.713 2391.004 2391.296 2391.588 2391.879
#0.0001376894 0.0001362054 0.0001346138 0.0001329289 0.0001311646 0.0001293351 它是一个matrix,但可以转换为data.frame
as.data.frame.list(xtabs(value ~ mass, df1) , check.names = FALSE)
# 2390.421 2390.713 2391.004 2391.296 2391.588 2391.879
#1 0.0001376894 0.0001362054 0.0001346138 0.0001329289 0.0001311646 0.0001293351数据
df1 <- structure(list(mass = c(2390.421, 2390.713, 2391.004, 2391.296,
2391.588, 2391.879), value = c(0.0001376894, 0.0001362054, 0.0001346138,
0.0001329289, 0.0001311646, 0.0001293351)), class = "data.frame",
row.names = c("1",
"2", "3", "4", "5", "6"))发布于 2021-01-15 21:05:43
基本R选项
> t(unstack(rev(df)))
2390.421 2390.713 2391.004 2391.296 2391.588
res 0.0001376894 0.0001362054 0.0001346138 0.0001329289 0.0001311646
2391.879
res 0.0001293351或data.table选项
> dcast(setDT(df), . ~ mass, value = "value")[, -1]
2390.421 2390.713 2391.004 2391.296 2391.588
1: 0.0001376894 0.0001362054 0.0001346138 0.0001329289 0.0001311646
2391.879
1: 0.0001293351数据
> dput(df)
structure(list(mass = c(2390.421, 2390.713, 2391.004, 2391.296,
2391.588, 2391.879), value = c(0.0001376894, 0.0001362054, 0.0001346138,
0.0001329289, 0.0001311646, 0.0001293351)), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))https://stackoverflow.com/questions/65743444
复制相似问题