Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将行中的值按类似列分组_R_Dataframe - Fatal编程技术网

R 将行中的值按类似列分组

R 将行中的值按类似列分组,r,dataframe,R,Dataframe,我有一个列,里面有多个值。。 像 我将数据与 Species_Data2 <- data.frame(str_split_fixed(Species_Data$Other.Anopheline.species, ",", 21)) 我想制作一个数据帧,如: X1 X2 X3 X4 X5 X6 X7 X8 A B C D E F G NA A

我有一个列,里面有多个值。。 像

我将数据与

Species_Data2 <- data.frame(str_split_fixed(Species_Data$Other.Anopheline.species, ",", 21))
我想制作一个数据帧,如:

X1    X2    X3      X4        X5        X6      X7    X8
A     B     C       D         E         F       G     NA
A     B     C       NA        E         F       G     NA
A     NA    C       D         NA        F       G     T
然后。。。。 我想将列名称设置为行值:-

科尔曼

'A'    'B'   'C'     'D'       'E'       'F'     'G'    'T' 
  A     B     C        D         E         F       G     NA
  A     B     C       NA         E         F       G     NA
  A    NA     C        D        NA         F       G      T
尝试创建排序…但效果不太好…:(


如果我理解正确,OP希望重新排列数据,以便每个字母都有一个单独的列。如果一行中有字母,则该字母将出现在重塑数据的相应列/行中。
NA
表示一行中缺少一个字母。此外,字母列应按顺序排列字母顺序

1.
dplyr
/
tidyr
进近 如果我们从OP调用
stringr::str_split_fixed()生成的data.frame开始
我们需要将拆分后的数据从宽格式改为长格式,删除空条目,对行进行排序,使列按字母顺序显示,然后再次改为宽格式。要进行改形,需要行id。要获得所需的输出,
pivot\u wide()
必须调用
names\u from=value
参数:

library(dplyr)
library(tidyr)
as.data.frame(stringr::str_split_fixed(DF$ColumnX1, ",", 21)) %>% 
  mutate(rn = row_number()) %>% 
  pivot_longer(-rn) %>% 
  filter(value != "") %>% 
  arrange(as.character(value)) %>% 
  pivot_wider(rn, names_from = value) 
此处显示了重复字母的数量

通过使用
unique()
,在重塑之前删除重复值,可以恢复预期的行为:

具有重复值的数据
DF2您还没有包括这些后面的逻辑。在顶部添加了后面的逻辑。仍然不清楚您希望如何从第一个版本转换到第二个版本,或者您尝试了什么。我在每行中都有重复的值…因此给出了“0”和“1”。但我想我可以接受这一点:)。。。。再次感谢再次感谢你…我很快就会和你分享我所做的
'A'    'B'   'C'     'D'       'E'       'F'     'G'    'T' 
  A     B     C        D         E         F       G     NA
  A     B     C       NA         E         F       G     NA
  A    NA     C        D        NA         F       G      T
library(dplyr)
library(tidyr)
as.data.frame(stringr::str_split_fixed(DF$ColumnX1, ",", 21)) %>% 
  mutate(rn = row_number()) %>% 
  pivot_longer(-rn) %>% 
  filter(value != "") %>% 
  arrange(as.character(value)) %>% 
  pivot_wider(rn, names_from = value) 
     rn A     B     C     D     E     F     G     T    
  <int> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct>
1     1 A     B     C     D     E     F     G     NA   
2     2 A     B     C     NA    E     F     G     NA   
3     3 A     NA    C     D     NA    F     G     T
library(data.table)
setDT(DF)[, stringr::str_split(ColumnX1, ","), by = 1:nrow(DF)][, dcast(.SD, nrow ~ V1)]
   nrow A    B C    D    E F G    T
1:    1 A    B C    D    E F G <NA>
2:    2 A    B C <NA>    E F G <NA>
3:    3 A <NA> C    D <NA> F G    T
DF <- data.frame(ColumnX1 = c("A,D,C,B,F,E,G",
                              "F,A,B,E,G,C",
                              "C,D,G,F,A,T")
)
library(data.table)
setDT(DF2)[, stringr::str_split(ColumnX1, ","), by = 1:nrow(DF)][, dcast(.SD, nrow ~ V1)]
   nrow A B C D E F G T
1:    1 1 1 2 1 1 1 1 0
2:    2 1 1 1 0 1 2 1 0
3:    3 1 0 1 1 0 1 1 1
setDT(DF2)[, stringr::str_split(ColumnX1, ","), by = 1:nrow(DF)][
  , dcast(unique(.SD), nrow ~ V1)]
   nrow A    B C    D    E F G    T
1:    1 A    B C    D    E F G <NA>
2:    2 A    B C <NA>    E F G <NA>
3:    3 A <NA> C    D <NA> F G    T
library(dplyr)
library(tidyr)
as.data.frame(stringr::str_split_fixed(DF2$ColumnX1, ",", 21)) %>% 
  mutate(rn = row_number()) %>% 
  pivot_longer(-rn) %>% 
  filter(value != "") %>% 
  arrange(as.character(value)) %>% 
  pivot_wider(rn, names_from = value, values_fn = list(value = unique))
DF2 <- data.frame(ColumnX1 = c("A,D,C,B,F,E,G,C",
                              "F,A,B,E,G,C,F",
                              "C,D,G,F,A,T")
)