转置特定列,同时在 R 中保留第一列完整(重复)
Transpose specific columns while leaving first columns intact (with duplicates) in R
我是 Whosebug 的新手,所以我希望我正确地标记了主题。
另外,我一般都是编程新手,所以我的步骤可能不太合乎逻辑。
我有以下数据框(但更大):
df <- data.frame(location = c("a", "a", "a", "b", "b"),
date = c("2017-05-01", "2017-05-02", "2017-05-03", "2017-05-01", "2017-05-02"),
average1 = c(246, 233, 257, 290, 307),
average2 = c(134, 256, 315, 346, 312),
average3 = c(214, 315, 233, 249, 216))
我想转置平均值,但也希望将它们与它们的位置和日期相关联。
数据帧的前两行将像这样结束:
location date ave_interval average
a 2017-05-01 average1 246
a 2017-05-01 average2 134
a 2017-05-01 average3 214
a 2017-05-02 average1 233
a 2017-05-02 average2 256
a 2017-05-02 average3 315
etc
有人知道如何编码吗?
我试过以下:
我制作了一个单独的数据 table,其中只有位置、日期和平均值 1,因为我不知道如何计算所有平均值。
尝试 1:
> recast(df, date + average1 ~ am, id.var = c("location", "date"))
给我以下错误:
Error in FUN(X[[i]], ...) : object 'average1' not found
names(df) gives me (mind the strange spacing):
"location" "datum" "average1"
is.numeric(df$average1)
[1] TRUE
exists("df$average1")
[1] FALSE
尝试2:
df.new < -reshape(df,dir='w',idvar=c('location','date'),timevar='average1');
Error in Ops.data.frame(df.new, -reshape(df, dir = "w", idvar = c("location", :
‘<’ only defined for equally-sized data frames
In addition: Warning messages:
1: In Ops.factor(left) : ‘-’ not meaningful for factors
2: In Ops.factor(left) : ‘-’ not meaningful for factors
总结:
如何编码某些列的转置并将标题名称转移到列“ave_interval”?我的 header 名称可能有问题吗?
提前致谢。
这是 pivot_longer
的工作
library(dplyr)
df %>%
pivot_longer(cols = c("average1", "average2", "average3"),
names_to = "average_interval", values_to = "average")
# A tibble: 15 x 4
location date average_interval average
<fct> <fct> <chr> <dbl>
1 a 2017-05-01 average1 246
2 a 2017-05-01 average2 134
3 a 2017-05-01 average3 214
4 a 2017-05-02 average1 233
5 a 2017-05-02 average2 256
6 a 2017-05-02 average3 315
7 a 2017-05-03 average1 257
8 a 2017-05-03 average2 315
9 a 2017-05-03 average3 233
10 b 2017-05-01 average1 290
11 b 2017-05-01 average2 346
12 b 2017-05-01 average3 249
13 b 2017-05-02 average1 307
14 b 2017-05-02 average2 312
15 b 2017-05-02 average3 216
我是 Whosebug 的新手,所以我希望我正确地标记了主题。 另外,我一般都是编程新手,所以我的步骤可能不太合乎逻辑。
我有以下数据框(但更大):
df <- data.frame(location = c("a", "a", "a", "b", "b"),
date = c("2017-05-01", "2017-05-02", "2017-05-03", "2017-05-01", "2017-05-02"),
average1 = c(246, 233, 257, 290, 307),
average2 = c(134, 256, 315, 346, 312),
average3 = c(214, 315, 233, 249, 216))
我想转置平均值,但也希望将它们与它们的位置和日期相关联。 数据帧的前两行将像这样结束:
location date ave_interval average
a 2017-05-01 average1 246
a 2017-05-01 average2 134
a 2017-05-01 average3 214
a 2017-05-02 average1 233
a 2017-05-02 average2 256
a 2017-05-02 average3 315
etc
有人知道如何编码吗?
我试过以下: 我制作了一个单独的数据 table,其中只有位置、日期和平均值 1,因为我不知道如何计算所有平均值。
尝试 1:
> recast(df, date + average1 ~ am, id.var = c("location", "date"))
给我以下错误:
Error in FUN(X[[i]], ...) : object 'average1' not found
names(df) gives me (mind the strange spacing):
"location" "datum" "average1"
is.numeric(df$average1)
[1] TRUE
exists("df$average1")
[1] FALSE
尝试2:
df.new < -reshape(df,dir='w',idvar=c('location','date'),timevar='average1');
Error in Ops.data.frame(df.new, -reshape(df, dir = "w", idvar = c("location", :
‘<’ only defined for equally-sized data frames
In addition: Warning messages:
1: In Ops.factor(left) : ‘-’ not meaningful for factors
2: In Ops.factor(left) : ‘-’ not meaningful for factors
总结: 如何编码某些列的转置并将标题名称转移到列“ave_interval”?我的 header 名称可能有问题吗?
提前致谢。
这是 pivot_longer
library(dplyr)
df %>%
pivot_longer(cols = c("average1", "average2", "average3"),
names_to = "average_interval", values_to = "average")
# A tibble: 15 x 4
location date average_interval average
<fct> <fct> <chr> <dbl>
1 a 2017-05-01 average1 246
2 a 2017-05-01 average2 134
3 a 2017-05-01 average3 214
4 a 2017-05-02 average1 233
5 a 2017-05-02 average2 256
6 a 2017-05-02 average3 315
7 a 2017-05-03 average1 257
8 a 2017-05-03 average2 315
9 a 2017-05-03 average3 233
10 b 2017-05-01 average1 290
11 b 2017-05-01 average2 346
12 b 2017-05-01 average3 249
13 b 2017-05-02 average1 307
14 b 2017-05-02 average2 312
15 b 2017-05-02 average3 216