【发布时间】:2021-06-25 13:37:48
【问题描述】:
我有一个类似的数据集(但有更多列):
table <- "year site square triangle circle
1 2019 A 3 9 5
2 2019 A 5 NA 34
3 2019 B 0 0 69
4 2019 B NA 111 2
5 2020 C 0 45 3
6 2020 C 29 0 NA
7 2020 D NA 0 1
8 2021 D 3 NA 4
9 2021 D 158 5 0
10 2021 D 2 9 0"
df <- read.table(text=table, header = TRUE)
df
我想旋转表格的一部分,使其类似于以下内容:
year site type count
1 2019 A square 3
2 2019 A triangle 9
3 2019 A circle 5
4 2019 A square 5
5 2019 A triangle NA
6 2019 A circle 34
7 2019 B square 0
8 2019 B triangle 0
9 2019 B circle 60
(等等)
我已经尝试过来自 here 的解决方案,但这不涉及计数,所以当我使用这些解决方案时我失去了这个价值。
例如,下面的代码让我在每列中都留下了 NA,我丢失了计数值
df2 <- df[1:2]
df2$type <- apply(df[3:5], 1, function(k) names(df[3:5])[k])
df2
year site type
1 2019 A circle, NA, NA
2 2019 A NA, NA, NA
3 2019 B NA
4 2019 B NA, NA, triangle
5 2020 C NA, circle
6 2020 C NA, NA
7 2020 D NA, square
8 2021 D circle, NA, NA
9 2021 D NA, NA
10 2021 D triangle, NA
我也尝试过使用 tidyr gather() 包,但这不允许我保留多个列。
library(tidyr)
df3 <- gather(df, year, site, `square`:`circle`)
head(df3)
year site
1 square 3
2 square 5
3 square 0
4 square NA
5 square 0
6 square 29
我唯一的想法是在我的数据框中创建一个新的唯一数字 (1-X) 列,将其与 gather() 一起使用,然后通过该唯一 ID 合并原始数据框和新数据框,然后删除不需要的列.这可行,但我想知道是否有更好、更清洁的解决方案?
【问题讨论】:
-
jl748795,Stack 的标签推荐引擎充其量是“不完美”的,请注意它建议的标签并对其提出更多批评:rstudio(已删除)纯粹是为了提问关于 IDE 本身,而不是 R 语言。
标签: r pivot pivot-table tidyr