在数据框中堆叠具有重叠值的不同列

问题描述 投票:0回答:1
df <- data.frame(x=c(1,2,3,4), y1=c('a','a',NA,NA), y2=c(NA,NA,'b','b'))

  x   y1   y2
  1    a <NA>
  2    a <NA>
  3    a    b  --> a and b share the same value of 3
  4 <NA>    b

我正在尝试将

y1
y2
堆叠到新的
y
列中,以便
y1
y2
的每个非 NA 值都获得其相应的
x
值。

输出应如下所示:

 x    y
 1    a
 2    a
 3    a
 3    b
 4    b

3
重复出现,因为它同时出现在
a
b
中。

我尝试了

bind_rows
中的
dplyr
,但它似乎仅适用于不同的数据帧。

r dplyr tidyverse
1个回答
0
投票

你试试

reshape(df2, idvar="x", direction="long", varying=2:3, v.names="y") |>
  na.omit() |>
  subset(select=-time)

给予

    x y
1.1 1 a
2.1 2 a
3.1 3 a
3.2 3 b
4.2 4 b

注意

输入更正:

df2 = data.frame(x=c(1,2,3,4), y1=c('a','a','a',NA), y2=c(NA,NA,'b','b'))
© www.soinside.com 2019 - 2024. All rights reserved.