重复行,R中的某些值除外。要将这些值转换为自己的列吗

重复行,R中的某些值除外。要将这些值转换为自己的列吗,r,R,我有一个包含重复行的数据集。除此之外,这些行有5列,它们不包含相同的值,这会阻止我使用distinct()。我想知道是否有一种方法可以让我转身 Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8 1 2 3 7 9 10 11 4 1 2 3 8 10 11 12

我有一个包含重复行的数据集。除此之外,这些行有5列,它们不包含相同的值,这会阻止我使用distinct()。我想知道是否有一种方法可以让我转身

Column1 Column2 Column3 Column4 Column5 Column6 Column7 Column8
1         2        3        7     9       10      11      4
1         2        3        8     10      11      12      5
进入这个

Column1 Column2 Column3 Column4_a Column4_b Column5_a Column5_b Column6_a Column6_b Column7_a Column7_b 
1         2        3        7        8          9        10        10       11         11       12  

              

这可能接近你想要的。将数据重塑为long,然后按变量分组,并忽略重复的行。之后,您可以为将来的列创建名称,并将其重塑为宽。这里的代码使用了
tidyverse
功能:

library(tidyverse)
#Code
newdf <- df %>%
  pivot_longer(everything()) %>%
  arrange(name) %>%
  group_by(name) %>%
  filter(!duplicated(value)) %>%
  mutate(name=paste0(name,'_',row_number())) %>%
  pivot_wider(names_from = name,values_from=value)
库(tidyverse)
#代码
新DF%
pivot_更长(所有内容())%>%
排列(名称)%%>%
分组单位(名称)%>%
筛选器(!重复(值))%>%
突变(名称=粘贴0(名称,''''u',行号())%>%
枢轴(名称从=名称,值从=值)
输出:

# A tibble: 1 x 13
  Column1_1 Column2_1 Column3_1 Column4_1 Column4_2 Column5_1 Column5_2 Column6_1 Column6_2 Column7_1
      <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>
1         1         2         3         7         8         9        10        10        11        11
# ... with 3 more variables: Column7_2 <int>, Column8_1 <int>, Column8_2 <int>
#一个tible:1 x 13
第1列第1列第2列第1列第3列第1列第4列第2列第5列第1列第5列第2列第6列第2列第7列第1列
1         1         2         3         7         8         9        10        10        11        11
# ... 还有3个变量:Column7_2、Column8_1、Column8_2
使用的一些数据:

#Data
df <- structure(list(Column1 = c(1L, 1L), Column2 = c(2L, 2L), Column3 = c(3L, 
3L), Column4 = 7:8, Column5 = 9:10, Column6 = 10:11, Column7 = 11:12, 
    Column8 = 4:5), class = "data.frame", row.names = c(NA, -2L
))
#数据

df在创建序列列后,我们可以使用
pivot\u wide
来实现这一点

library(dplyr)
library(tidyr)
df %>% 
  mutate(rn = 1, rn2 = row_number()) %>%
  pivot_wider(names_from = rn2, values_from = starts_with('Column'))