Rivot_longer合并多列

问题描述 投票:0回答:1

我有一个数据框,其中几列具有相似的信息,我希望将其折叠成更少的列。这似乎与pivot_long或gather的正常用法有些不同,我被卡住了。我的第一个想法是制作3个单独的集合并进行行绑定。.但是我认为这里有人会提供更优雅的解决方案!

df<-data.frame("PicID"=letters[1:8],
"Near_Species1" = c("bird","bird", "bird", "dog", "dog", "human", "none", "human"),
"Count1" = c(1,1,1,1,2,1,0,1),
"Near_Species2" = c(NA,"human", NA, NA, "human", NA, NA, NA), 
"Count2" = c(NA,1, NA, NA, 1, NA, NA, NA),
"Far_Species"=c(NA, NA, NA,NA, NA, NA, NA, "bird"))

我想通过]的基本结构对此进行更长的讨论>

PicID   NearorFar   Species   Count

我希望根据Near_Species1每张图片至少有1行,而不管其中有什么(无,NA等)。

并且,如果Near_Species2,Count2或Far_Species中除了“ none”以外还有其他物种,我想再排一行。本质上,物种的“无”是NA。但我希望至少有1行记录该ID。

输出看起来像这样,但是删除物种为NA的行。

df_out <- data.frame(
  "PicID" = c("a", "b", "c", "d", "e", "f", "g", "h", 
          "a", "b", "c", "d", "e", "f", "g", "h", 
          "a", "b", "c", "d", "e", "f", "g", "h"),
"NearorFar"=rep(c("Near", "Far"),times=c(16, 8)),
"Species"= paste(c("bird","bird", "bird", "dog", "dog", "human", "none", "human", 
                NA,"human", NA, NA, "human", NA, NA, NA, 
                NA, NA, NA,NA, NA, NA, NA, "bird")),
"Count"= c(1,1,1,1,2,1,0,1,
          NA,1, NA, NA, 1, NA, NA, NA, 
          rep(NA, 8))
)

我有一个数据框,其中几列具有相似的信息,我希望将其折叠成更少的列。这似乎与pivot_long或gather的常规用法有些不同,我是...

r tidyr data-manipulation
1个回答
0
投票

我们可以使用pivot_longer

© www.soinside.com 2019 - 2024. All rights reserved.