R 在不同的行中重新构造具有多个相同ID的数据集
我有一个数据集,ID列在第1列,诊断列在第2列,原因列在第3列,依此类推。对于具有多个诊断的ID,每个诊断列为一行,因此具有多个诊断的同一ID具有多行。我希望所有内容都是每个ID一行,几个诊断都是列。这可能吗 我的数据如下所示:R 在不同的行中重新构造具有多个相同ID的数据集,r,bioinformatics,R,Bioinformatics,我有一个数据集,ID列在第1列,诊断列在第2列,原因列在第3列,依此类推。对于具有多个诊断的ID,每个诊断列为一行,因此具有多个诊断的同一ID具有多行。我希望所有内容都是每个ID一行,几个诊断都是列。这可能吗 我的数据如下所示: ID diagnosis cause_of_diagnosis 1 A A 1 B B 1 C C 2 A A 3 A A 3 B B 3 C C 我希望数据最终看起来像: ID diagnosis_1 diagnosis_2
ID diagnosis cause_of_diagnosis
1 A A
1 B B
1 C C
2 A A
3 A A
3 B B
3 C C
我希望数据最终看起来像:
ID diagnosis_1 diagnosis_2 diagnosis_3 cause_of_diagnosis_1 cause_of_diagnosis_2 cause_of_diagnosis_3
1 A B C A B C
2 A - - A - -
3 A B C A B C
我们可以使用
dplyr
和tidyr
来重塑数据。使用collect
以长格式获取数据,group\u by
ID
和key
为每个“诊断”和“诊断原因”创建新列名,并以宽格式传播数据
library(dplyr)
library(tidyr)
df %>%
gather(key, value, -ID) %>%
group_by(ID, key) %>%
mutate(key1 = paste(key, row_number(), sep = "_")) %>%
ungroup() %>%
select(-key) %>%
spread(key1, value)
# ID cause_of_diagnosis_1 cause_of_diagnosis_2 cause_of_diagnosis_3 diagnosis_1 diagnosis_2 diagnosis_3
# <int> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 A B C A B C
#2 2 A NA NA A NA NA
#3 3 A B C A B C
库(dplyr)
图书馆(tidyr)
df%>%
聚集(键,值,-ID)%%>%
分组依据(ID,键)%>%
突变(键1=粘贴(键,行号(),sep=“”))%>%
解组()%>%
选择(-key)%%>%
排列(键1,值)
#ID原因诊断原因诊断原因诊断原因2原因诊断原因诊断原因3诊断原因1诊断原因2诊断原因3
#
#1 1 A B C A B C
#2不,不,不,不
#3 3 A B C A B C
数据
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 3L, 3L, 3L),diagnosis = structure(c(1L,
2L, 3L, 1L, 1L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"),
cause_of_diagnosis = structure(c(1L, 2L, 3L, 1L, 1L, 2L,
3L), .Label = c("A", "B", "C"), class = "factor")),
class = "data.frame", row.names = c(NA, -7L))
df我们可以使用dplyr
和tidyr
来重塑数据。使用collect
以长格式获取数据,group\u by
ID
和key
为每个“诊断”和“诊断原因”创建新列名,并以宽格式传播数据
library(dplyr)
library(tidyr)
df %>%
gather(key, value, -ID) %>%
group_by(ID, key) %>%
mutate(key1 = paste(key, row_number(), sep = "_")) %>%
ungroup() %>%
select(-key) %>%
spread(key1, value)
# ID cause_of_diagnosis_1 cause_of_diagnosis_2 cause_of_diagnosis_3 diagnosis_1 diagnosis_2 diagnosis_3
# <int> <chr> <chr> <chr> <chr> <chr> <chr>
#1 1 A B C A B C
#2 2 A NA NA A NA NA
#3 3 A B C A B C
库(dplyr)
图书馆(tidyr)
df%>%
聚集(键,值,-ID)%%>%
分组依据(ID,键)%>%
突变(键1=粘贴(键,行号(),sep=“”))%>%
解组()%>%
选择(-key)%%>%
排列(键1,值)
#ID原因诊断原因诊断原因诊断原因2原因诊断原因诊断原因3诊断原因1诊断原因2诊断原因3
#
#1 1 A B C A B C
#2不,不,不,不
#3 3 A B C A B C
数据
df <- structure(list(ID = c(1L, 1L, 1L, 2L, 3L, 3L, 3L),diagnosis = structure(c(1L,
2L, 3L, 1L, 1L, 2L, 3L), .Label = c("A", "B", "C"), class = "factor"),
cause_of_diagnosis = structure(c(1L, 2L, 3L, 1L, 1L, 2L,
3L), .Label = c("A", "B", "C"), class = "factor")),
class = "data.frame", row.names = c(NA, -7L))
df好的,谢谢!您是为key、key1和value输入任何值,还是按原样运行?@Gunn HelenMoenkey
和key1
是动态生成的。按原样运行。好的-我不确定这是否正是我想要的。我目前没有得到任何诊断专栏,但有大约700种不同的诊断原因columns@Gunn-HelenMoen你确定数据中没有诊断栏吗?“诊断”列将位于末尾,因为这些列是按字母顺序排序的。将上述结果存储在df1
中,然后运行grep(“^diagnosis”,names(df1))
您得到了什么?是的,也有诊断列,但看起来有几百列-我不太清楚为什么会这样,谢谢!您是为key、key1和value输入任何值,还是按原样运行?@Gunn HelenMoenkey
和key1
是动态生成的。按原样运行。好的-我不确定这是否正是我想要的。我目前没有得到任何诊断专栏,但有大约700种不同的诊断原因columns@Gunn-HelenMoen你确定数据中没有诊断栏吗?“诊断”列将位于末尾,因为这些列是按字母顺序排序的。将上述结果存储在df1
中,然后运行grep(“^diagnosis”,names(df1))
您得到了什么?是的,也有诊断列,但看起来有几百个,我不太清楚这是为什么